web-dev-qa-db-ja.com

asp.netアプリケーションでC#7を有効にする

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#バージョンを選択する可能性はありません。

Compile options

53
davidthegrey

WebサイトのNuGetウィンドウで:

  1. アンインストールMicrosoft.CodeDom.Providers.DotNetCompilerPlatform
  2. 再インストールする
  3. web.configで、system.codedom > compilers > compilerの下で、compilerOptions = "/ langversion:6 to 7を変更します。
68
Hassan Abdullah

デフォルトの言語設定でコンパイルできますが、C#7オプションではコンパイルできません。enter image description here

ただし、以下の設定ではコンパイル時エラーが発生します。

enter image description here

そのため、言語バージョン設定をデフォルトのままにしておくことができます。

Roslynで実験し、Visual 2017のデフォルトコンパイラビルドを使用しない場合は、さらに変更が必要になる場合があります

プロジェクト名を選択して、[>>プロパティウィンドウ] >> [ビルド]を右クリックし、[条件付きコンパイルシンボル]テキストボックスに以下の2つのオプションを追加します__DEMO__,__DEMO_EXPERIMENTAL__

enter image description here

更新

C#7.0を使用するには、2.0。+バージョンのMicrosoft.Net.Compilersを使用する必要があります

enter image description here

microsoft.Net.Compilersの最新バージョン(2.0+)をインストールした後、言語バージョンをC#7として選択できます

最善の解決策は、最新バージョンのMicrosoft.Net.Compilers(2.0+)をインストールすることです。

25

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の範囲の整数でなければなりません。

  1. プロジェクトが少なくとも.net-4.6をターゲットにしていることを確認してください。必要に応じてターゲットを変更します。
  2. プロジェクトがまだpackages.configを使用している場合は、Microsoft.CodeDom.Providers.DotNetCompilerPlatformをアンインストールして再インストールし、nugetパッケージの.net-4.6バリアントを指すようにプロジェクトファイルを更新する必要があります。 <PackageReference/>を使用している場合は、すべて設定されています(ただし、web.configsystem.codedomセクションを手動で構成する必要があります)。
5
binki

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>

詳細については:

3
Mathews

別のカスタムプロジェクトBを参照しているカスタムプロジェクトAを参照していました。AからBへの参照を再読み込みしただけで、(今のところ)動作しているように見えました。

0
Dirk Boer