web-dev-qa-db-ja.com

WebサイトプロジェクトタイプでC#6を使用する方法

既存のWebサイトプロジェクトタイプVisual Studio 2015を更新し、フレームワークを4.6に変更しました。

その後、コードビハインドファイルでこれらのすべての新機能を使用できるようになると期待していました。

残念ながら、次のようなエラーが表示されます。

エラーCS8026:C#5では、機能「式のボディプロパティ」は使用できません。言語バージョン6以降を使用してください。

または例:

エラーCS8026:C#5では機能「補間された文字列」は使用できません。言語バージョン6以降を使用してください。

Googleで簡単に確認したところ、ScottGuのブログ投稿(ページで「8026」を検索)で コメントを投稿している男 が見つかりました。

私は彼のソリューションを理解していないので、ソリューションをもっと見やすくしたいので、このSO投稿を作成しました。

私の質問:

タイプWebサイト(つまり、ないWebアプリケーション)のVisual Studio 2015プロジェクトを使用してC#6機能を認識するにはどうすればよいですか?

106
Uwe Keim

ASP.NET MVC 5(5.2.3でテスト済み)でこれをテストしましたが、他のWebフレームワークではマイレージが異なる場合がありますが、追加する必要があるのは Roslyn CodeDOM | NuGet パッケージ

.NETコンパイラ用のCodeDOMプロバイダー...

新しい.NET Compiler Platform( "Roslyn")コンパイラをサービスAPIとして使用する代替CodeDOMプロバイダー。これにより、CodeDOM(ASP.NETランタイムコンパイルなど)を使用するシステムで新しい言語機能がサポートされ、これらのシステムのコンパイルパフォーマンスが向上します。

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/

NuGetパッケージはDLLファイルを追加し、web.configに以下を追加する必要があります。

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>

それでも見つからない場合。自分を追加してみてください。

106
jbtule

VS IDEでこれを行う方法については このブログ投稿 from Sayed Ibrahim Hashimi も参照してください。

Visual Studio 2015 Update 1には、これを簡素化するための新機能が含まれています。 .NET 4.5+をターゲットとする少なくとも1つのWebプロジェクトがあり、プロジェクトメニューにDotNetCompilerPlatform NuGetパッケージがないソリューションを開いている場合、新しいオプションが表示されます。C#6/VBを有効にします。 _ 14が表示されます。
enter image description here

47
Vertigo

@jbtuleが示唆したようにDotNetCompilerPlatformをインストールしましたが、それでも同じエラーが発生していました。

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

ソリューションを閉じ、binフォルダーとobjフォルダーを削除してから、ソリューションを開いて再構築しました。これで、C#6機能が機能します。

14
Jon Crowell

ScottGuのブログ投稿に対するコメント (ページで「8026」を検索)から可能な解決策:

ソリューション提案1(David Taylor)

これらのRTMコードdom要素をweb.configに追加します。

<system.codedom>
    <compilers>
        <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
        <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
</system.codedom>

次に、RoslynおよびMicrosoft.CodeDom.Providers。*。dllをBINディレクトリに追加します。

セットアップは簡単ですが、VS 2015 RTMで新しい「Webサイト」を作成するときに.NET 4.6を選択した場合、デフォルトのテンプレートがセットアップされていないことは私にとっては奇妙なことでした。

ソリューション提案2(Martin)

上記のDavid Taylorのコメントに加え、TargetFrameworkをデフォルトのv4.5.2としてWebアプリを作成すると、system.codedomの設定が正しいようです。 TargetFrameworkをv4.6に変更すると、CSharpのコンパイラ設定が変更され、問題が発生するようです。

私の回避策は次のとおりです。

  1. ファイル/新規/ASP.NET Webアプリケーション
  2. ASP.NET 4.5.2テンプレートから「Web API」テンプレートを選択します
  3. Web.configのsystem.codedom要素(お​​よびそのコンテンツ)のコピーを取得します
  4. Properties/TargetFrameworkを使用して、Target Frameworkを4.6に設定します
  5. Web.configの変更されたsystem.codedom要素を、TargetFrameworkを変更する前に取得したコピーで置き換えます
  6. ヒット F5

期待どおりにホームページがロードされます。

詳しくは、TargetFrameworkをv4.6に変更した直後のsystem.codedomの内容。次のとおりでした(タイプ "Microsoft.CSharp.CSharpCodeProvider"の使用に注意してください):

<system.codedom>
    <compilers>
        <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">
            <providerOption name="CompilerVersion" value="v4.0"/>
        </compiler>
        <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
</system.codedom>
12
Uwe Keim

これはWebサイトプロジェクト用ではありません。これは、ASP.NET MVCプロジェクトに対して行う方法です。

Visual Studio UIでC#6を切り替えることができます。これはとても簡単なオプションです。まず試してみる価値があります。

  1. プロジェクトを右クリックして、Propertiesを選択します。
  2. Buildタブをクリックします。
  3. ビルドタブには、最下部にAdvanced ...ボタンがあります。
  4. これにより、以下に示すように、高度なビルド設定が開きます。 C#6.0を選択します。

enter image description here

7
Jess

Webサイトプロジェクトを使用したVS2017の外観は次のとおりです。

enter image description here

3
b_levitt

WebAPIプロジェクトにゼロの変更を加えた後にこのエラーを受け取りました。 DotNetCompilerPlatform nugetパッケージをアンインストールして再インストールすると、問題が修正されました。

2
ComeIn