如何将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?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Database First Entity Framework 4 升级到 6
如何将 /bigobj 参数添加到 msbuild [重复]
msbuild不会将引用的本机项目的输出复制到c#project out dir