2017-06-03 110 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指向正確的那個。