如何使用MsBuild v15构建c ++项目?

时间:2017-06-03 05:56:23

标签: c# c++ .net msbuild visual-studio-2017

我在Visual Studio 2017中使用NuGet Package Manager安装了以下程序集

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

所有版本均为15版

我想用Msbuild

构建一个c ++项目
    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);  
    }

但我收到以下错误:

  

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

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

我必须做三个主要步骤:

  1. 从NuGet下载15+版Microsoft.Build软件包。来自NuGet的那些已经过时了。
  2. 下载Microsoft.Build.Runtime软件包。如果您没有下载该软件包,您的项目可能仍会构建,但它会在运行时LoadProject崩溃。
  3. 在我的app.config中绑定了bindingRedirects。请参阅:https://developercommunity.visualstudio.com/content/problem/24545/microsoftbuildcpptaskscommon-references-incorrect.html

答案 2 :(得分:0)

确保C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ 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指向正确的。