我正在用 C # 6.0测试 Visual Studio 2015,但是语言特性不起作用。在 MVC web 应用程序中,下面的代码可以编译:
if (!string.IsNullOrWhiteSpace(Model.Profile?.TypeName)) { // More logic here... }
但是,当我通过 Debug 和 IIS Express 运行应用程序时,会得到以下错误:
CS1525: 无效的表达式术语’
如何启用这些特性?
检查你的项目属性,去构建,高级,看看是否 C # 6.0如果你没有它作为默认。
目前对 MVC5和 C # 6.0有完美的支持,并且运行得非常好!
这个工作在 MVC 5(测试5.2.3) ,你只需要添加 Roslyn 代码 Dom Nuget 包
使用新的。NET 编译器平台(“ Roslyn”)编译器作为服务 API。这为使用 CodeDOM 的系统(例如 ASP.NET 运行时编译)提供了对新语言特性的支持,并提高了这些系统的编译性能。
PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Https://www.nuget.org/packages/microsoft。 CodeDom。提供商
嗯,我有 MVC5和最近安装 VS 2015。
我已经安装了 CodeDOM 提供程序包,但它没有帮助..。 但是在那之后我意识到,这个软件包只支持框架4.5,而我在测试期间将目标框架设置为4.6——尽管它可以与4.5一起工作... ..。
所以也要注意目标框架。如果你有4.5-只要安装软件包微软。密码。供应商。DotNetCompilerPlatform.但是如果你的目标是4.5.1-4.6,那么你必须在 web.config 部分进行修改
<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>
对于 C # ,只需将 类型改为:
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
包括下面的建议,安装最新的 Microsoft.CodeDom.Providers.DotNetCompilerPlatform我也必须设置我的 根 Web.config system.codedom这最终得到所有的错误在 Visual Studio 2015消失:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Web.config
system.codedom
Visual Studio 2015
<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>
现在重新启动 Visual Studio,应该就可以了。
Visual Studio
Visual Studio 2015还将在 Project 菜单中显示 Enable C#6 / VB 14,并选择 ASP.NET 网站/Web 应用程序。
Enable C#6 / VB 14
这实际上会将 Microsoft.CodeDom.Providers.DotNetCompilerPlatform和 Microsoft.Net.Compilers包安装到您的项目中,并将适当的标记添加到 web.config 文件中。
Microsoft.Net.Compilers
我在 VisualStudio2015中也遇到过同样的问题。这里的另一个答案提到了我使用的解决方案,但是他们错误地指定了修复程序,而且从未进行说明。
在 VisualStudio 菜单上,选择 工程项目,如果遇到此问题,应该会看到子项 启用 C # 6/VB 14。选择此菜单子项。它将从 Nuget 下载正确的软件包并安装它们。此后,重新启动 VisualStudio 并重新加载解决方案。
我无法验证这是否也将修复 项目属性 > 建立 > 高级 > 语言版本选择到 C # 6,所以您可能想在从菜单启用 C # 6之后检查这一点。
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:7 /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.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:15 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />