Проблема с использованием MSBuild API для компиляции vcxproj - ошибка MSB4057 - PullRequest
1 голос
/ 25 января 2012

У меня есть недавно сделанный проект C ++ (.vcxproj), в который я добавил несколько файлов.Сейчас я пытаюсь скомпилировать его, используя следующий код:

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 из командной строки строит ее просто отлично.Чего мне не хватает?

1 Ответ

1 голос
/ 26 января 2012
  1. Установите объект Project следующим образом:

       //pc.LoadProject(projectPath); - redundant
       //var project = new Project(pc); - let `ProjectCollection` return your project
    
       var project = pc.LoadProject(projectPath);
    
  2. Build() принимает имя цели , а не свойство имя:

Итак, передайте цель Rebuild :

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