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



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

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);

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

C:WINDOWSMicrosoft.NETFrameworkv4.0.30319Csc.exe
ExportWindowsMDFile:
    C:Program Files (x86)Microsoft SDKsWindowsv8.0AbinNETFX 4.0 Toolswinmdexp.exe 

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

C:Program Files (x86)MSBuild12.0binCsc.exe
ExportWindowsMDFile:
    C:Program Files (x86)Microsoft SDKsWindowsv8.1AbinNETFX 4.5.1 Toolswinmdexp.exe

为什么这发生在我的代码&我怎样才能改变呢?

从Visual Studio 2013开始,MSBuild不再是。net框架组件。这意味着对打包和部署进行一些重组。旧的MSBuild框架仍然存在于。net框架文件夹中。但是,当您安装Visual Studio 2013时,微软构建工具12.0也安装到C:Program Files (x86)MSBuild12.0.请注意,构建工具可以从Visual Studio中单独获得。

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

相关内容

  • 没有找到相关文章

最新更新