web-dev-qa-db-ja.com

MSBuildでC#7.1を使用する

Visual Studio 2017で新しい C#7.1言語機能 を使用するには、設定_<LangVersion>latest</LangVersion>_をプロジェクトファイルに追加します。

ただし、そのようなプロジェクトをMSBuild(バージョン15.3.409.57025、C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Binにあります)からビルドすると、エラーが発生します。

_CSC : error CS1617: Invalid option 'latest' for /langversion;
must be ISO-1, ISO-2, Default or an integer in range 1 to 6.
_

この機能はMSBuildでまだサポートされていないのですか、これを機能させることは可能ですか?

これは、元々Visual Studio 2013および2015でさまざまに作成された200以上のプロジェクトを対象としています。これらはすべて、 Target Framework Migrator ツール(保存されたlotsをクリックして表示されます-.csprojファイルの変更の検査に基づいて-ジョブを正しく実行します)。

プロジェクトはすべてVisual Studio 2017から正常にビルドされます。

21
Richard Everett

MVCプロジェクトがこの問題を引き起こしていることがわかりました。

修正するために、Microsoft.CodeDom.Providers.DotNetCompilerPlatformバージョン1.0.から1.0.7までのプロジェクトで使用されるNuGetパッケージ。

2
Richard Everett

Nugetパッケージ

  • Microsoft.Net.Compilers nugetパッケージは機能せず、をインストールする必要はありません

次のproject/build settingsを設定します

  • DebugandReleaseビルドプロパティで少なくともC# 7.1以上を設定します。 (経由:[プロジェクト]メニュー> [プロジェクト名]のプロパティ> [ビルド]タブ> [詳細]ボタン>言語バージョン)。

  • 最新に設定すると、notは機能しません。

preview

また、最新のMSBuildバージョンを実行していることを確認してください。

22
Dominic Jonas

Microsoft.Net.Compilers パッケージ(バージョン2.3.x、C#7.1を取得する)への参照を追加します。

短い パッケージの説明

Microsoft.Net.Compilers

このパッケージには、C#およびVisual Basicコンパイラが含まれているだけでなく、MSBuildターゲットを変更して、システムにインストールされているバージョンではなく、含まれているコンパイラバージョンが使用されるようにします。このパッケージをインストールすると、Microsoft Build Tools 2015が必要になります。

7
Julien Couvreur

前述のOPでエラーが発生してここに着陸した場合、msbuildコマンドラインを実行します(たとえば、jenkinsなどのビルドエージェントから)、ソリューションは次のように簡単です。 Microsoft Build Tools 2015のアップグレードに。

choco install Microsoft-build-tools を使用するか、公式の Microsoft Build Tools 2015 を使用して手動で行うか、Visual Studio 2017のインストールを更新します。

1
firepol

ここでは、C#7.1を使用したC#コンソールアプリを使用したソリューションがあります。

VS 2017コマンドライン(およびMSBuild 15.3.409.57025)を使用すると、正常に機能しました。 (.csprojには<LangVersion>latest</LangVersion>が含まれます。)

この機能はMSBuildでまだサポートされていないのですか、これを機能させることは可能ですか?

はい、そうです。

csc.exeのどのインスタンスが実行されており、そのバージョンは何ですか?バージョンを引用しているにもかかわらず、csc.exeのバージョンが間違っているようです(エラーメッセージには1-6と表示されるため、C#7でも動作しません)。

0
Richard