How to use C# 6 with Web Site project type?
更新了现有的网站项目类型Visual Studio 2015,我将框架改为4.6。
然后我期望在我的代码隐藏文件中提供所有这些新特性。
不幸的是,我遇到了如下错误:
0或例如:
Error CS8026: Feature 'interpolated strings' is not available in C# 5. Please use language version 6 or greater.
我在谷歌上做了一个快速检查,发现一个人在Scottgu的博客上发表了一些评论(在页面上搜索"8026")。
因为我不理解他的解决方案,加上我想让解决方案更可见,所以我创建了这个帖子。
我的问题:
如何让Visual Studio 2015项目类型为Web站点(即,不是Web应用程序)来识别C 6功能?
我已经用ASP.NET MVC 5测试过这个(测试过5.2.3),并且您的里程可能会因其他Web框架而异,但您只需要添加Roslyn codedom nuget包。
.NET编译器的codedom提供程序…01 | PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform |
https://www.nuget.org/packages/microsoft.codedom.providers.dotNetCompilerPlatform/
nuget包应该添加dll文件并将以下内容添加到web.config中。
1 2 3 4 5 6 | <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> |
如果它仍然不见了。尝试添加自己。
另请参阅SayedIbrahimHashimi的博客文章,了解如何通过vs-ide实现这一点。
In Visual Studio 2015 Update 1 we have included a new feature to simplify this. When you have a solution open which has at least one web project which is targetting .NET 4.5+ and does not have the DotNetCompilerPlatform NuGet package in the Project menu you’ll see a new option, Enable C# 6 / VB 14 appear.
我按照@jbtule的建议安装了dotnetcompilerplatform,但仍然收到相同的错误。
1 | PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform |
我关闭解决方案,删除bin和obj文件夹,然后打开解决方案并重新构建。现在,C 6功能可以工作了。
可能的解决方案,取自Scottgu博客上的评论(在页面上搜索"8026"):
解决方案建议1(David Taylor)将这些rtm code dom元素添加到web.config中:
2然后将roslyn和microsoft.codedom.providers.*.dll文件添加到bin目录中。
设置起来很容易,但我很奇怪,如果您在vs 2015 RTM中创建新的"网站"时选择了.NET 4.6,那么没有为它设置默认模板。
解决方案建议2(Martin)在上面大卫泰勒的评论中,当使用TargetFramework作为默认v4.5.2创建Web应用程序时,system.codedom设置似乎是正确的。将TargetFramework更改为v4.6似乎会修改CSharp的编译器设置,从而导致问题。
我的解决方法如下:
主页应按预期加载。
有关信息,请在将targetframework更改为v4.6之后立即显示system.codedom内容。如下(注意使用"microsoft.csharp.csharpcodeprovider"类型):
1 2 3 4 5 6 7 8 | <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> |
这不适用于网站项目。这是您为ASP.NET MVC项目执行此操作的方式。
您可以在Visual Studio UI中切换c_6。这是一个很容易的选择,值得一试。
以下是VS2017中的网站项目:
在对WebAPI项目进行零更改后,我收到了此错误。我卸载了dotNetCompilerPlatformNuget包并重新安装,解决了问题。