Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将msbuild升级到C#6?_C#_Msbuild_Continuous Integration_Roslyn_C# 6.0 - Fatal编程技术网

如何将msbuild升级到C#6?

如何将msbuild升级到C#6?,c#,msbuild,continuous-integration,roslyn,c#-6.0,C#,Msbuild,Continuous Integration,Roslyn,C# 6.0,我想在我的项目中使用C#6(空传播,其他特性) 我已经在我的电脑上安装了VS 2015,它工作得非常出色,并构建了测试代码,如 var user = new SingleUserModel(); //all model fields are null var test = user.User?.Avatar?["blah"]; 但当我将项目推送到repo,CI开始构建它时,构建失败,因为不支持? 我也在CI服务器上安装了VS2015,但看起来它没有使用它。 我能做什么 CI-CruiseCon

我想在我的项目中使用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:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe生成请确保调用:

C:\ProgramFiles(x86)\MSBuild\14.0\Bin\MSBuild.exe
这是Visual Studio 2015附带的MsBuild版本,并调用理解这一点的C#编译器。通过安装任何版本的Visual Studio 2015或安装单机版,可以在系统上获得此版本的MsBuild

添加对的引用也将强制使用新编译器:

安装包Microsoft.Net.Compilers
请注意,安装包将选择最新的可用版本,该版本可能不是您正在寻找的版本。安装之前,请检查发行说明和依赖项,以解决所处理版本的潜在问题,在本例中,该版本更特定于VS 2015

因此,对于Visual Studio 2015:

安装软件包Microsoft.Net.Compilers-版本1.0.0

顺便说一句,您还可以在构建服务器上安装“Microsoft构建工具2015”而不是VS2015

它将MSBuild安装到同一路径:

C:\ProgramFiles(x86)\MSBuild\14.0\Bin\MSBuild.exe

您可能已经在使用此功能,但这可能会在将来帮助其他人。我最近遇到了这个问题,它让我朝着正确的方向前进,并最终导致了一个解决方案

另一种可能的解决方案是手动更新项目文件,使其以希望生成项目的MSBuild版本为目标

我最近进行了TeamCity build server更新,并已在其上安装了Microsoft build Tools 2015。我认为我已经在构建服务器上准备好了一切,我的解决方案瞄准了C#6.0,我的每个项目都瞄准了.NET4.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">

该行的关键组件是它的工具版本。我只是将项目文件中的这一行更改为以下内容:

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

这里的区别是,我的目标是版本14,而不是4。14.0版与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,您必须安装构建工具2017,并让您的项目以15.0而不是14.0为目标,但我还没有验证这一点。

RyuJIT或其他版本有这么多错误,您是否担心这会导致错误?请注意,如果您正在更新PATH env变量,请确保删除旧位置(例如:C:\Windows\Microsoft.NET\Framework\v4.0.30319),因为它可能在从cmdI执行“msbuild”时仍会调用该位置。我还必须安装nuget软件包Microsoft.NET.Compilers:请参阅是否有解决方案,而不必在每个项目中安装nuget软件包?我有100个项目需要这样做,对我来说似乎没有必要。好像是某个地方的一个bug。有人对@ColeW问题有答案吗?我想这是有原因的,为什么这个问题与那个环境有关。最好对问题发表评论。由于stackoverflow不允许我对问题发表评论,所以我以系统允许的唯一方式发布了它。如果你不觉得它有用,就忽略它。对我来说,在构建服务器上搜索解决方案时,这是一种方法,而不是在安装“Microsoft构建工具2015”(或“Microsoft构建工具2017”)后安装VS2015您还可以控制要用于生成解决方案的Visual Studio版本:MSBuild.exe/t:build YourSolution.sln/p:VisualStudioVersion=14.0[对于VS2010将其设置为10.0,对于VS2015将其设置为14.0,对于VS2017将其设置为15.0]以下载并安装Microsoft build Tools 2015 Update 3,请访问并转到
可再发行文件和构建工具
部分。对于从下面给出的链接下载MS Build Tools 2015的任何人,这些工具适用于有bug的旧(更新前)版本。。。我找到了2015年更新3的链接。