如何用MsBuild v15构建C++项目?
我安装了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中构建这个项目时,它将构建时没有错误。但是当我想以编程方式构建它时,这个错误将会出现。
还有另一个问题,没有任何答案可以帮助我。
我必须做的三个主要步骤:
- 下载从的NuGet版本15+ Microsoft.Build包。那些不是来自NuGet的是过时的。
-
下载Microsoft.Build.Runtime包。如果您没有下载该软件包,您的项目可能仍会生成,但它会在运行时崩溃
LoadProject
。 - 挂钩binding.Redirects在我的app.config。请参阅:https://developercommunity.visualstudio.com/content/problem/24545/microsoftbuildcpptaskscommon-references-incorrect.html
我有类似的问题,并通过为每个msbuild程序集添加bindingRedirect到app.config来解决它。
只要看看C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe.config
并将必要的块复制到您的app.config。
请确保您有以下在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指向正确的那个。