关于asp.net:如何在网站项目类型中使用C#6?

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提供程序…0

1
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=\&quot;Web\&quot; /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.
enter image description here


我按照@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的编译器设置,从而导致问题。

我的解决方法如下:

  • 文件/新建/ASP.NET Web应用程序
  • 从ASP.NET 4.5.2模板中选择"Web API"模板
  • 在web.config中复制system.codedom元素(及其内容)
  • 使用属性/TargetFramework,将目标框架设置为4.6
  • 将web.config中修改后的system.codedom元素替换为在更改targetframework之前获取的副本
  • 命中f5
  • 主页应按预期加载。

    有关信息,请在将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=\&quot;Web\&quot; /optionInfer+"/>
        </compilers>
    </system.codedom>


    这不适用于网站项目。这是您为ASP.NET MVC项目执行此操作的方式。

    您可以在Visual Studio UI中切换c_6。这是一个很容易的选择,值得一试。

  • 右键单击项目并选择"属性"。
  • 单击"生成"选项卡。
  • "生成"选项卡具有高级…按钮在最下面。
  • 这将打开高级生成设置,如下所示。选择C(6)。
  • enter image description here


    以下是VS2017中的网站项目:

    enter image description here


    在对WebAPI项目进行零更改后,我收到了此错误。我卸载了dotNetCompilerPlatformNuget包并重新安装,解决了问题。