如何使用 C # 6与网站项目类型?

更新了现有的 网站项目类型 Visual Studio 2015,将 Framework 更改为4.6。

然后,我希望在文件后面的代码中可以使用所有这些新特性。

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

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

或例如:

错误 CS8026: C # 5中没有“内插字符串”特性。请使用语言版本6或更高版本。

我做了一个快速的谷歌检查,发现 一个人发表了一些评论在一个博客的 ScottGu (搜索“8026”在页面上)。

因为我不理解他的解决方案,加上我想让解决方案更加明显,我已经创建了这个 SO 张贴。

我的问题是:

我怎样才能有一个类型为 网站(即不是 网上申请)的 Visual Studio 2015项目来识别 C # 6的特性?

61476 次浏览

我已经用 ASP.NET MVC 5(测试5.2.3)测试过了,你的经验可能会随着其他 web 框架的不同而不同,但是你只需要为 Roslyn CodeDOM添加 NuGet包。

Microsoft.CodeDom.Providers.DotNetCompilerPlatform 应该添加 DLL 文件..。

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

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

... 并在 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>

如果仍然缺少 XML,请尝试自己添加。

可能的解决方案,取自 ScottGu 博客上的评论(在页面上搜索“8026”) :

解决方案建议1(大卫 · 泰勒)

将这些 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>

然后将罗斯林和微软的. codeDom. Provider. * . dll 添加到你的 bIN 目录中。

设置起来很容易,但是如果您选择了默认模板,它却没有被设置,这让我感到很奇怪。NET 4.6在 VS 2015 RTM 中创建新的“ Web 站点”时。

解决方案建议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>

我按照@jbtule 的建议安装了 DotNetCompilerPlatform,但仍然出现了相同的错误。

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

我关闭解决方案,删除 bin 和 obj 文件夹,然后打开解决方案并重新构建。现在 C # 6特性可以工作了。

另请参阅 Sayed Ibrahim Hashimi中的 这篇博文,了解如何通过 VSIDE 实现这一点。

在 VisualStudio2015Update1中,我们包含了一个新特性来简化这个过程。当你有一个解决方案打开,其中至少有一个网络项目的目标。NET 4.5 + ,没有在项目菜单中的 DotNetCompilerPlatform NuGet 包,你会看到一个新的选项,启用 C # 6/VB 14出现。
enter image description here

更新。

VS 2017和2019将这个特性移到了 Build-> ASP.NET 编译enter image description here

在对我的 WebAPI 项目进行零更改之后,我收到了这个错误。我卸载了 DotNetCompilerPlatform 的 nuget 包并重新安装,修复了这个问题。

这不是为了 网站计划,而是为了 ASP.NET MVC 项目。

您可以在 VisualStudioUI 中切换 C # 6。这是一个非常简单的选择,值得一试。

  1. 右键单击项目并选择 物业
  2. 单击 建造选项卡。
  3. Build 选项卡的最底部有一个 高级..。按钮。
  4. 这将打开如下所示的 高级生成设置。选择 C # 6.0。

enter image description here

下面是 VS2017中的一个网站项目:

enter image description here

我在 VS2019VisualStudio2019中偶然发现了这种寻找解决方案的方法。

这里是当您有网站项目选择在您的解决方案文件。“构建→ ASP.NET 编译→启用最新的 C # 和 VB 语言特性”。

enter image description here