2012-01-25 31 views
1

我有一個新添加了一些文件的C++(.vcxproj)項目。現在,我試圖編譯使用它下面的代碼:使用MSBuild API編譯vcxproj時出錯 - 錯誤MSB4057

var clogger = new ConsoleLogger(LoggerVerbosity.Diagnostic); 
var pc = new ProjectCollection(new Dictionary<string, string>{{"Configuration", "Release"}, 
{"ToolsVersion", "4.0"}}, 
    new[] { clogger }, ToolsetDefinitionLocations.Registry); 
pc.DefaultToolsVersion = "4.0"; 
pc.LoadProject(projectPath); 

var project = new Project(pc); 
try 
{ 
    Assert.That(project.Build("Release"), Is.True); 
} 
finally 
{ 
    pc.UnregisterAllLoggers(); 
} 

不幸的是,試圖編譯該項目給了我以下錯誤:目標在內的不

Building with tools version "4.0". 
MSBUILD : error MSB4057: The target "Rebuild" does not exist in the project. 

我試過很多指定一個目標,我一直得到相同的錯誤。我認爲Rebuild目標確實在項目中,因爲命令行中的msbuild構建它就好了。我錯過了什麼?

+0

重建目標在C:\ Program Files \ MSBuild \ Microsoft.Cpp \ v4.0 \ Microsoft.BuildSteps.targets –

+0

中定義項目引用'Microsoft.Cpp.Targets' ...就夠了嗎? –

回答

1
  1. 設置你的Project對象如下:

    //pc.LoadProject(projectPath); - redundant 
        //var project = new Project(pc); - let `ProjectCollection` return your project 
    
        var project = pc.LoadProject(projectPath); 
    
  2. Build()需要Target名,而不是Property名稱:

所以在這裏通過重建目標:

Assert.That(project.Build("Rebuild"), Is.True); 
+0

謝謝,這有幫助! –