如何将 msbuild 升级到 C# 6?

How to upgrade msbuild to C# 6?

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

我已经在我的 PC 上安装了 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:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

构建

请务必致电:

C:\Program Files (x86)\MSBuild.0\Bin\MsBuild.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)\MSBuild.0\Bin\MsBuild.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,但我还没有验证这一点。