msbuildをC#6にアップグレードする方法


106

プロジェクトでC#6を使用したい(null伝播、その他の機能)。

私は自分のPCにVS 2015をインストールしました。それは見事に機能し、次のようなテストコードをビルドします。

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

しかし、プロジェクトをリポジトリにプッシュし、CIがそれをビルドし始めると、サポートされていないためビルドが失敗します?

CIサーバーにもVS2015をインストールしましたが、使用していないようです。私に何ができる?

CI-CruiseControl .NETビルド C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe


3
下記のリンクから2015 MSのビルドツールをダウンロードして誰にも、彼らは私がリンクを見つけた...バグがあり、古い(更新前)のバージョンのためのものである、ここで 2015にアップデート3
bdrajer

回答:


164

必ずお電話ください。

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

これは、Visual Studio 2015に付属し、これを理解するC#コンパイラを呼び出すMsBuildのバージョンです。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

2
RyuJITやその他の多くのバグがあるため、これによりバグが発生する懸念はありますか?
Maslow

3
これについてのメモです。PATH環境変数を更新する場合は、古い場所(例:C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319)を削除してください。これは、 "msbuild "cmdから
TheWebGuy 2016

2
私はまた、nugetパッケージMicrosoft.Net.Compilersをインストールする必要がありました:見stackoverflow.com/a/36774876/584714
DrGriff

2
すべてのプロジェクトにnugetパッケージをインストールする必要がない、これに対する解決策はありますか?私にはこれを必要とする100のプロジェクトがあり、それは私には不要のようです。どこかでバグのようです。
Cole W

2
@ColeWの質問に対する回答はありますか?
ジノフ2017年

61

ちなみに、ビルドサーバーにVS2015の代わりに「Microsoft Build Tools 2015」をインストールすることもできます。

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

MSBuildを同じパスにインストールします。

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

私見には原因があり、なぜその環境に関する質問なのか。質問にコメントするほうがよい。
jogo 2015年

24
stackoverflowでは質問にコメントできないため、システムで許可されている唯一の方法で投稿しました。そして、それが役に立たないと感じた場合は、無視してください。ビルドサーバーでソリューションを検索しているとき、VS2015をインストールする代わりに、これが方法でした
MuhKuh

"Microsoft Build Tools 2015"(または "Microsoft Build Tools 2017")をインストールすると、ソリューションのビルドに使用するVisual Studioのバージョンを制御できます:MSBuild.exe / t:Build YourSolution.sln / p :VisualStudioVersion = 14.0 [VS2010では10.0、VS2015では14.0、VS2017では15.0に設定]
AlexSanséauSep

Microsoft Build Tools 2015 Update 3をダウンロードしてインストールするには、古いVSダウンロードにアクセスして、Redistributables and Build Toolsセクションに移動してください。
RBT

12

あなたはおそらくすでにこれを動かしていますが、これは将来誰かを助けるかもしれません。私は最近この質問に出くわしました、そしてそれは私を正しい方向に動かし、そして最終的に解決に至りました。

これに対する別の可能な解決策は、プロジェクトのビルドに使用する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">

ここでの違いは、バージョン4ではなくバージョン14を対象としたことでした。バージョン14.0はビルドツール2015に対応しています。これを変更することで、TeamCityビルドサーバーは正しいMSBuildバージョンを使用し、C#6.0コードをビルドできました。

また、VS2015が適切に機能せず、ローカルビルドをめちゃくちゃにしたため、4.6.1を使用するために、このTargetFrameworkVersion xmlノードを手動で更新する必要がありましたが、ここでは関係ありません。

私が間違っている場合は誰かが私を訂正してください、しかし参考までに、バージョン番号は次のようになると思います:

4.0 = VS2012

12.0 = VS2013

14.0 = VS2015

15.0 = VS2017

.net 4.7を使用する場合は、ビルドツール2017をインストールし、プロジェクトを14.0ではなく15.0にする必要があると思いますが、これは確認していません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.