如何将msbuild升级到C#6?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将msbuild升级到C#6?相关的知识,希望对你有一定的参考价值。

我想在我的项目中使用C#6(空传播,其他功能)。

我已经在我的电脑上安装了VS 2015,它的工作非常出色并构建了测试代码

var user = new SingleUserModel(); //all model fields are null
var test = user.User?.Avatar?["blah"];

但是当我将我的项目推送到repo并且CI开始构建它时,由于不支持的?,构建失败。

我也在CI服务器上安装了VS2015,但看起来它没有使用它。我能做什么?

CI - CruiseControl .NET使用C:WindowsMicrosoft.NETFrameworkv4.0.30319MSBuild.exe构建

答案

请务必致电:

C:Program Files (x86)MSBuild14.0BinMsBuild.exe

这是随Visual Studio 2015一起提供的MsBuild版本,并调用了解这一​​点的C#编译器。您可以通过安装任何版本的Visual Studio 2015或安装独立的Microsoft Build Tools 2015在您的系统上获得此版本的MsBuild。

添加对following NuGet package的引用也会强制使用新的编译器:

Install-Package Microsoft.Net.Compilers

请注意,Install-Package将选择最新版本,可能不是您要查找的版本。在安装之前,请检查发行说明和依赖项以解决正在处理的版本的基本问题,在这种情况下,VS 2015更具体。

因此,对于Visual Studio 2015:

Install-Package Microsoft.Net.Compilers -Version 1.0.0
另一答案

顺便说一下,您还可以在构建服务器上安装“Microsoft Build Tools 2015”而不是VS2015。

https://www.microsoft.com/en-us/download/details.aspx?id=48159

它将MSBuild安装到相同的路径:

C:Program Files (x86)MSBuild14.0BinMsBuild.exe
另一答案

你可能已经有了这个工作,但这可能会在将来帮助其他人。我最近遇到了这个问题,它让我朝着正确的方向前进,最终找到了解决方案。

另一种可能的解决方案是手动更新项目文件,以定位您希望构建项目的MSBuild版本。

我最近经历了TeamCity构建服务器更新,我已经安装了Microsoft Build Tools 2015。我以为我在构建服务器上安装了所有内容,我的解决方案针对的是C#6.0,我的每个项目都针对.net 4.6.1。和你一样,C#6.0专用代码在我的本地环境中构建得很好,但我的TeamCity构建服务器并不喜欢它。

正如其他人所说,我尝试使用Microsoft.Net.Compilers NuGet包。它的最新版本允许构建在我的构建服务器上工作,但它不允许我在本地发布我的代码(我的要求)。该NuGet包的早期版本会让我发布,但构建不起作用。

我发现我必须做的是最终修改我的解决方案中的每个项目文件,专门针对可以处理C#6.0代码的MSBuild版本。在我的每个项目文件中,我找到了类似于以下行的行:

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

该行的关键组件是其中的ToolsVersion部分。我只是在项目文件中更改了这一行,以阅读以下内容:

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

这里的不同之处在于我的目标是版本14,而不是4.版本14.0与Build Tools 2015相对应。通过更改它,我的TeamCity构建服务器使用了正确的MSBuild版本,并且能够构建我的C#6.0代码。

我还必须手动更新这个的TargetFrameworkVersion xml节点以使用4.6.1,因为VS2015没有做正确的事情并搞砸了我的本地构建,但这与此无关。

如果我错了,请有人纠正我,但仅供参考,我认为版本号是这样的:

4.0 = VS2012

12.0 = VS2013

14.0 = VS2015

15.0 = VS2017

我相信如果你想使用.net 4.7,你必须安装Build Tools 2017并让你的项目定位15.0而不是14.0,但我还没有验证这一点。

以上是关于如何将msbuild升级到C#6?的主要内容,如果未能解决你的问题,请参考以下文章

2C++ 的升级

如何将 Database First Entity Framework 4 升级到 6

如何将 /bigobj 参数添加到 msbuild [重复]

msbuild不会将引用的本机项目的输出复制到c#project out dir

MSBuild:如何将文件复制到由执行命令的输出确定的 DestinationFolder?

如何有条件地将 C 代码片段编译到我的 Perl 模块?