2012-01-25 27 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

谢谢,这有帮助! –