如何使用Web站点项目types的C#6?

更新了现有的Web站点项目typesVisual Studio 2015,我将框架更改为4.6。

然后我希望在我的代码背后有所有这些新function。

不幸的是我得到像这样的错误:

错误CS8026:在C#5中不能使用“expression式主体特性”function。请使用语言版本6或更高版本。

或者例如:

错误CS8026:function“插入的string”在C#5中不可用。请使用语言版本6或更高版本。

我做了一个快速的Google检查,发现一个人在ScottGu的博客文章(在页面上search“8026”)上发表了一些评论 。

由于我不明白他的解决scheme,再加上我想让解决scheme更明显,所以我创build了这个SOpost。

我的问题:

我怎样才能有一个types的网站 (即不Web应用程序 )的Visual Studio 2015项目识别C#6function?

我已经用ASP.NET MVC 5testing了这个(testing5.2.3),你的里程可能会因其他web框架而异,但是你只需要添加Roslyn CodeDOM | NuGet包

用于.NET编译器的CodeDOM提供程序…

使用新的.NET编译器平台(“Roslyn”)编译器作为服务API的替代CodeDOM提供者。 这为使用CodeDOM的系统(例如ASP.NET运行时编译)提供了对新语言function的支持,并提高了这些系统的编译性能。

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> 

如果它仍然失踪。 尝试添加自己。

另请参阅Sayed Ibrahim Hashimi撰写的关于如何通过VS IDE做到这一点的博客文章 。

在Visual Studio 2015 Update 1中,我们添加了一个新function来简化这个过程。 当你有一个解决scheme打开,其中至less有一个Web项目的目标是.NET 4.5+,并没有项目菜单中的DotNetCompilerPlatform NuGet包,你会看到一个新的选项,启用C#6 / VB 14出现。

在这里输入图像说明

可能的解决scheme,取自ScottGu的博客文章 (在页面上search“8026”)的评论:

解决schemebuild议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中创build一个新的“Web站点”时select了.NET 4.6,那么默认的模板就没有设置。

解决schemebuild议2(Martin)

除上述David Taylor的评论之外,当使用TargetFramework作为默认v4.5.2创buildWeb App时,它看起来像system.codedom设置是正确的。 将TargetFramework更改为v4.6似乎会修改CSharp的编译器设置,从而导致问题。

我的解决方法如下:

  1. 文件/新build/ ASP.NET Web应用程序
  2. 从ASP.NET 4.5.2模板中select“Web API”模板
  3. 在web.config中获取system.codedom元素(及其内容)的副本
  4. 使用Properties / TargetFramework,将Target Framework设置为4.6
  5. 将web.config中修改后的system.codedom元素replace为更改TargetFramework之前的副本
  6. F5

主页应按预期加载。

有关信息,将TargetFramework更改为v4.6后立即显示system.codedom内容。 如下所示(注意使用types“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> 

我安装DotNetCompilerPlatform作为@jbtulebuild议,但仍然得到相同的错误。

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

我closures了解决scheme,删除了bin和obj文件夹,然后打开解决scheme并重build。 现在C#6function工作。

没有其他答案为我工作。 我们find了在Visual Studio UI中切换C#6的方法,它可以工作! 这是一个简单的select,首先值得一试。

  1. 右键单击您的项目,然后select属性
  2. 点击Build选项卡。
  3. 生成选项卡的底部有一个高级…button。
  4. 这将打开Advanced Build Settings ,如下所示。 selectC#6.0。

在这里输入图像说明

在对我的WebAPI项目进行ZERO更改后,我收到了这个错误。 我卸载了DotNetCompilerPlatform的nuget软件包并重新安装,解决了这个问题。