如何将msbuild升级到c# 6

本文关键字:msbuild | 更新日期: 2023-09-27 18:07:52

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

我已经在我的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构建

如何将msbuild升级到c# 6

一定要打电话:

C:'Program Files (x86)'MSBuild'14.0'Bin'MsBuild.exe

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

添加对以下NuGet包的引用也会强制使用新的编译器:

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'14.0'Bin'MsBuild.exe

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

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

我最近经历了一个TeamCity构建服务器更新,我已经在上面安装了微软构建工具2015。我认为我已经在构建服务器上准备好了一切,我的解决方案以c# 6.0为目标,我的每个项目都以。net 4.6.1为目标。像你一样,在我的本地环境中,所有带有c# 6.0特定代码的东西都构建得很好,但我的TeamCity构建服务器不喜欢它。

正如其他人提到的,我尝试使用microt.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,但我还没有验证过这一点。