首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制BuildManager使用另一个版本的MSBuild

强制BuildManager使用另一个版本的MSBuild
EN

Stack Overflow用户
提问于 2014-08-10 02:40:56
回答 1查看 6.1K关注 0票数 10

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

代码语言:javascript
复制
ProjectCollection pc = new ProjectCollection();
pc.DefaultToolsVersion = "12.0";
pc.Loggers.Add(fileLogger);
Dictionary<string, string> globalProperty = new Dictionary<string, string>();
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<Microsoft.Build.Framework.ILogger> { fileLogger }.AsEnumerable()
};

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

当我运行这段代码时,它不会构建任何东西。我可以看到,除了一个特定版本的csc.exe之外,还在使用以下编译器winmdexp.exe

代码语言:javascript
复制
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构建解决方案时,将显示以下信息:

代码语言:javascript
复制
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

为什么在我的代码中会出现这种情况&我如何更改它呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-10 08:14:20

截至Visual 2013,MSBuild is no longer a .NET Framework component。这意味着对打包和部署进行一些调整。旧的MSBuild框架仍然存在于.NET框架文件夹中。但是,在安装Visual 2013时,12.0也安装到C:\Program (x86)\MSBuild\12.0中。请注意,构建工具可与Visual here分开使用。

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

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25225025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档