Visual Studio 2017で古いソリューションの作業を始めました。古いIDEでソリューションを開くだけでシームレスに機能しました。 C#アプリケーションプロジェクトは、デフォルトでC#7.0コンパイラになりました。それらのプロジェクトのプロパティページ(コンパイル/詳細)を使用すると、コンパイラのターゲット言語バージョンを簡単に選択できます。デフォルトは最新です。
ただし、asp.net Webプロジェクトでc#7.0を有効にする方法が見つかりません。次のような文を書いた場合:
if (int.TryParse("1", out int myInt)) { ... }
IDEは、バージョン7以降の言語を使用する必要があると警告しています。
このトピックに関する私の調査では、web.configファイルのsystem.codedomコンパイラ領域で特定のc#バージョンをターゲットにし、最新のRoslynバージョンをターゲットにする必要があることが示されています。
私が今持っているものは:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
c#6を対象としています。c#7の正しい設定はどのようなものですか?
Update以下は、Webプロジェクトで利用可能なCompileオプションのスクリーンショットです(イタリア語VS2017ですが、簡単に理解できるはずです)。ターゲットのC#バージョンを選択する可能性はありません。
WebサイトのNuGetウィンドウで:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
web.config
で、system.codedom > compilers > compiler
の下で、compilerOptions
= "/ langversion:6 to 7を変更します。デフォルトの言語設定でコンパイルできますが、C#7オプションではコンパイルできません。
ただし、以下の設定ではコンパイル時エラーが発生します。
そのため、言語バージョン設定をデフォルトのままにしておくことができます。
Roslynで実験し、Visual 2017のデフォルトコンパイラビルドを使用しない場合は、さらに変更が必要になる場合があります
プロジェクト名を選択して、[>>プロパティウィンドウ] >> [ビルド]を右クリックし、[条件付きコンパイルシンボル]テキストボックスに以下の2つのオプションを追加します__DEMO__,__DEMO_EXPERIMENTAL__
更新
C#7.0を使用するには、2.0。+バージョンのMicrosoft.Net.Compilersを使用する必要があります
microsoft.Net.Compilersの最新バージョン(2.0+)をインストールした後、言語バージョンをC#7として選択できます
最善の解決策は、最新バージョンのMicrosoft.Net.Compilers(2.0+)をインストールすることです。
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
バージョン2.0.0をインストールしようとして、プロジェクトが4.6よりも古いバージョンの.netをターゲットとする場合、langversion 6までしかサポートしていないroslynの古いバージョンが自動的に使用されます。 csharp-7をサポートする最初のバージョンを含むroslynの実行には、少なくとも.net-4.6が必要です。プロジェクトが.netの古いバージョンをターゲットにしている場合、次のようなエラーメッセージが表示されます。
CS1617/langversionの無効なオプション「latest」。 ISO-1、ISO-2、デフォルト、または1〜6の範囲の整数でなければなりません。
packages.config
を使用している場合は、Microsoft.CodeDom.Providers.DotNetCompilerPlatform
をアンインストールして再インストールし、nugetパッケージの.net-4.6バリアントを指すようにプロジェクトファイルを更新する必要があります。 <PackageReference/>
を使用している場合は、すべて設定されています(ただし、web.config
のsystem.codedom
セクションを手動で構成する必要があります)。C#7.xサポートの場合、プロジェクトのビルド構成言語バージョンをC#最新マイナーバージョン(最新)に設定します。
CodeDOM Providers for .NET Compiler Platform( "Roslyn")(Microsoft.CodeDom.Providers.DotNetCompilerPlatform nugetパッケージなど)を使用している場合は、asp.netのweb.configでcompilerOptions = "/ langversion:latest"を設定します。
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:latest /nowarn:1659;1699;1701"/>
</compilers>
</system.codedom>
詳細については:
別のカスタムプロジェクトBを参照しているカスタムプロジェクトAを参照していました。AからBへの参照を再読み込みしただけで、(今のところ)動作しているように見えました。