BuildManager使用另一个版本的MSBuild

  发布于 2022-12-28 21:59

以下代码尝试以编程方式构建解决方案,使用BuildManager:

ProjectCollection pc = new ProjectCollection();
pc.DefaultToolsVersion = "12.0";
pc.Loggers.Add(fileLogger);
Dictionary globalProperty = new Dictionary();
BuildRequestData buildRequest = new BuildRequestData(solutionName, globalProperty, null, new[] { "Build" }, null);

BuildParameters buildParameters = new BuildParameters(pc)
{
    DefaultToolsVersion = "12.0",
    OnlyLogCriticalEvents = false,
    DetailedSummary = true,
    Loggers = new List { fileLogger }.AsEnumerable()
};

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

当我运行此代码(它没有构建任何btw)时,我可以看到csc.exe除了一个特定版本之外还使用了以下编译器winmdexp.exe:

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Csc.exe
ExportWindowsMDFile:
    C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\winmdexp.exe 

但是当我使用VS IDE成功构建解决方案时,会出现以下信息:

C:\Program Files (x86)\MSBuild\12.0\bin\Csc.exe
ExportWindowsMDFile:
    C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\winmdexp.exe

为什么会在我的代码中发生这种情况?如何更改?

1 个回答
  • 从Visual Studio 2013开始,MSBuild不再是.NET Framework组件.这意味着包装和部署的一些重组.旧的MSBuild框架仍然存在于.NET Framework文件夹中.但是,在安装Visual Studio 2013时,Microsoft Build Tools 12.0也会安装到C:\ Program Files(x86)\ MSBuild\12.0.请注意,开发工具是Visual Studio中可单独购买这里.

    当我第一次尝试这个时,我遇到了和你一样的情况.问题是您可能引用了旧的"4.0"MSBuild Framework程序集.您需要引用位于C:\ Program Files(x86)\ MSBuild\12.0\bin中的新12.0程序集(您必须在VS中浏览以添加引用).您可能需要Microsoft.Build,Microsoft.Build.Engine和Microsoft.Build.Framework.一旦我更新了这些引用,我看到它在构建时使用的是与VS 2013相同的工具.

    2022-12-28 22:15 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有