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から正常にビルドされます。
MVCプロジェクトがこの問題を引き起こしていることがわかりました。
修正するために、Microsoft.CodeDom.Providers.DotNetCompilerPlatform
バージョン1.0.から1.0.7までのプロジェクトで使用されるNuGetパッケージ。
Microsoft.Net.Compilers パッケージ(バージョン2.3.x、C#7.1を取得する)への参照を追加します。
短い パッケージの説明 :
Microsoft.Net.Compilers
このパッケージには、C#およびVisual Basicコンパイラが含まれているだけでなく、MSBuildターゲットを変更して、システムにインストールされているバージョンではなく、含まれているコンパイラバージョンが使用されるようにします。このパッケージをインストールすると、Microsoft Build Tools 2015が必要になります。
前述のOPでエラーが発生してここに着陸した場合、msbuildコマンドラインを実行します(たとえば、jenkinsなどのビルドエージェントから)、ソリューションは次のように簡単です。 Microsoft Build Tools 2015のアップグレードに。
choco install Microsoft-build-tools を使用するか、公式の Microsoft Build Tools 2015 を使用して手動で行うか、Visual Studio 2017のインストールを更新します。
ここでは、C#7.1を使用したC#コンソールアプリを使用したソリューションがあります。
VS 2017コマンドライン(およびMSBuild 15.3.409.57025)を使用すると、正常に機能しました。 (.csproj
には<LangVersion>latest</LangVersion>
が含まれます。)
この機能はMSBuildでまだサポートされていないのですか、これを機能させることは可能ですか?
はい、そうです。
csc.exe
のどのインスタンスが実行されており、そのバージョンは何ですか?バージョンを引用しているにもかかわらず、csc.exe
のバージョンが間違っているようです(エラーメッセージには1-6
と表示されるため、C#7でも動作しません)。