2017-06-03 82 views
1

我安装了NuGet包管理器中的如下因素装配在Visual Studio 2017年如何用MsBuild v15构建C++项目?

Microsoft.Build; 
Microsoft.Build.Framework. 
Microsoft.Build.Utilities.Core 

所有在版本15

我想建一个C++项目的MSBuild

public static void Build(string namePerozhe) 
    { 
     Logger l = new Logger(); 

     ProjectCollection pc = new ProjectCollection(); 
     pc.DefaultToolsVersion = "15.0"; 
     pc.Loggers.Add(l); 
     Dictionary<string, string> GlobalProperty = new Dictionary<string, string>(); 
     GlobalProperty.Add("Configuration", "Release"); 
     GlobalProperty.Add("Platform", "Win32"); 
     BuildRequestData buildRequest = new BuildRequestData(namePerozhe, GlobalProperty, null, new[] { "Build" }, null); 

     BuildParameters buildParameters = new BuildParameters(pc) 
     { 
      OnlyLogCriticalEvents = false, 
      DetailedSummary = true, 
      Loggers = new List<Microsoft.Build.Framework.ILogger> { l }.AsEnumerable() 
     }; 

     var result = BuildManager.DefaultBuildManager.Build(buildParameters, buildRequest); 
    } 

,但我得到以下错误:

“SetEnv”任务无法从程序集 C:\ Program Files \ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ VC \ VCTargets \ Microsoft.Build.CppTasks.Common.dll。 无法加载文件或程序集'Microsoft.Build.Utilities.Core,Version = 15.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其某个依赖项。 系统找不到指定的文件。 确认声明是正确的,程序集及其所有依赖项都可用, ,并且任务包含一个实现Microsoft.Build.Framework.ITask的公共类。

当我在Visual Studio中构建这个项目时,它将构建时没有错误。但是当我想以编程方式构建它时,这个错误将会出现。

还有另一个问题,没有任何答案可以帮助我。

回答

1

我有类似的问题,并通过为每个msbuild程序集添加bindingRedirect到app.config来解决它。

只要看看C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe.config并将必要的块复制到您的app.config。

0

请确保您有以下在C块:\程序文件(x86)\微软的Visual Studio \ 2017年\社区\的MSBuild \ 15.0 \ msbuild.exe.config

 <dependentAssembly> 
      <assemblyIdentity name="Microsoft.Build.Tasks.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> 
      <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.0.0.0"/> 
     </dependentAssembly> 

或者你可以使用你自己的msbuild.exe,确保你的env PATH指向正确的那个。