Microsoft.Build.Framework指定工具版本

时间:2016-03-01 07:16:50

标签: c# msbuild

我有一个使用c#6.0的目标项目我需要以编程方式构建它。

我有以下代码:

        var pc = new ProjectCollection();
        pc.DefaultToolsVersion = "14.0" //set tools version
        var globalProperty = new Dictionary<string, string>
        {
            {"Configuration", "Release"},
            {"Platform", "Any CPU"},
            {"OutputPath", Utils.GetGaugeBinDir()}
        };

        var buildRequestData = new BuildRequestData(solutionFullPath, globalProperty, "14.0", new[] {"Build"}, null); //Set tools version here as well

        var errorCodeAggregator = new ErrorCodeAggregator();
        var buildParameters = new BuildParameters(pc) {Loggers = new ILogger[] {consoleLogger, errorCodeAggregator}};

        var buildResult = BuildManager.DefaultBuildManager.Build(buildParameters, buildRequestData);

无论我在哪里设置工具版本(上面两个选项),它都不构建C#6.0。

在命令行上,我可以这样做:

msbuild foo.csproj /tv:14.0 /t:rebuild

我从MSBuild 12.0 bin目录调用它,它可以工作。如果我删除/tv:14.0标志,它会按预期失败。

所以,问题是,将/tv标记指定为BuildManager的编程方式是什么?

1 个答案:

答案 0 :(得分:1)

var buildRequest = new BuildRequestData(_solutionPath, globalProperties, null, new[] {"Build"},

创建BuildRequestData时,为toolsVersion传递null。

然后确保项目引用的Microsoft.Build * .dll是正确的版本。 默认情况下,VS会从其自己的安装目录中添加一些。更新的应存在于&#34; C:\ Program Files(x86)\ MSBuild \ 14.0 \ Bin&#34;

相关问题