既存の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機能を認識するにはどうすればよいですか?
ASP.NET MVC 5(5.2.3でテスト済み)でこれをテストしましたが、他のWebフレームワークではマイレージが異なる場合がありますが、追加する必要があるのは Roslyn CodeDOM | NuGet パッケージ
新しい.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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
それでも見つからない場合。自分を追加してみてください。
VS IDEでこれを行う方法については このブログ投稿 from Sayed Ibrahim Hashimi も参照してください。
Visual Studio 2015 Update 1には、これを簡素化するための新機能が含まれています。 .NET 4.5+をターゲットとする少なくとも1つのWebプロジェクトがあり、プロジェクトメニューにDotNetCompilerPlatform NuGetパッケージがないソリューションを開いている場合、新しいオプションが表示されます。C#6/VBを有効にします。 _ 14が表示されます。
@jbtuleが示唆したようにDotNetCompilerPlatformをインストールしましたが、それでも同じエラーが発生していました。
PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
ソリューションを閉じ、binフォルダーとobjフォルダーを削除してから、ソリューションを開いて再構築しました。これで、C#6機能が機能します。
ScottGuのブログ投稿に対するコメント (ページで「8026」を検索)から可能な解決策:
これらの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=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
次に、RoslynおよびMicrosoft.CodeDom.Providers。*。dllをBINディレクトリに追加します。
セットアップは簡単ですが、VS 2015 RTMで新しい「Webサイト」を作成するときに.NET 4.6を選択した場合、デフォルトのテンプレートがセットアップされていないことは私にとっては奇妙なことでした。
上記のDavid Taylorのコメントに加え、TargetFrameworkをデフォルトのv4.5.2としてWebアプリを作成すると、system.codedomの設定が正しいようです。 TargetFrameworkをv4.6に変更すると、CSharpのコンパイラ設定が変更され、問題が発生するようです。
私の回避策は次のとおりです。
期待どおりにホームページがロードされます。
詳しくは、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=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
WebAPIプロジェクトにゼロの変更を加えた後にこのエラーを受け取りました。 DotNetCompilerPlatform nugetパッケージをアンインストールして再インストールすると、問題が修正されました。