在asp.net应用程序中启用c#7

dav*_*rey 53 c# asp.net c#-7.0 visual-studio-2017

我刚刚开始在Visual Studio 2017中使用我的旧解决方案.只需打开旧IDE中的解决方案即可无缝工作.c#应用程序项目现在默认为c#7.0编译器.这些项目的属性页面(编译/高级)可以轻松选择编译器的目标语言版本,默认为最新版本.

我找不到在asp.net web项目中启用c#7.0的方法.如果我写一个如下声明:

if (int.TryParse("1", out int myInt)) { ... }
Run Code Online (Sandbox Code Playgroud)

IDE警告我说我需要使用该语言的7+版本.

我对这个主题的研究表明,我应该定位web.config文件的system.codedom编译器区域中的特定c#版本,以便定位最新的Roslyn版本.

我现在拥有的是:

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
Run Code Online (Sandbox Code Playgroud)

针对c#6的目标是什么.只要我已经使用nuget下载了最新的Roslyn,c#7的正确设置是什么?

更新 下面是Web项目可用的编译选项的屏幕截图(它是意大利语VS2017,但应该很容易理解).没有可能在那里选择目标c#版本.

编译选项

Has*_*lah 70

在网站的NuGet窗口中:

  1. 卸载 Microsoft.CodeDom.Providers.DotNetCompilerPlatform
  2. 重新安装它
  3. web.config,在:system.codedom > compilers > compiler,change compilerOptions="/ langversion:6到7

  • 这绝对有效,是答案!但是对于那些来到这里的完整性,OP表示假设最新的rosyln安装了nuget.这意味着安装`Microsoft.Net.Compilers` 2.0 <=.此外,如果你想使用C#7元组,你需要从nuget`System.ValueTuple`安装 (8认同)
  • 也可能:`/ langversion:latest`,类似于`/ langversion:default`.[参见文档](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/langversion-compiler-option)). (3认同)

Ban*_*yan 25

我能够使用默认语言设置编译它,但不能使用C#7选项编译它. 在此输入图像描述

但是下面的设置给出了编译时错误:

在此输入图像描述

因此您可以将语言版本设置保留为默认值.

如果您尝试使用Roslyn而不使用Visual 2017默认编译器构建,那么您可能需要进行一些更改

选择项目名称并右键单击>>属性窗口>>构建,然后在"条件编译符号"文本框中添加以下两个选项 __DEMO__,__DEMO_EXPERIMENTAL__

在此输入图像描述

更新

要使用C#7.0,您需要使用2.0+版本的Microsoft.Net.Compilers

在此输入图像描述

安装最新版本的Microsoft.Net.Compilers(2.0+)后,您可以选择语言版本为C#7.

所以最好的解决方案是安装最新版本的Microsoft.Net.Compilers(2.0+).

  • Banketeshvar,"高级构建设置"对话框仅适用于桌面和控制台应用程序.不适用于网络项目.在Web项目中,您必须手动编辑web.config文件.我已经下载了编译器的第2版,但设置_/langversion:7_仍然是编译错误. (5认同)

Mat*_*ews 6

对于 C# 7.x 支持,将项目的构建配置语言版本设置为 C# 最新次要版本(最新)

构建配置语言版本

如果您使用 CodeDOM Providers for .NET Compiler Platform ("Roslyn")(例如 Microsoft.CodeDom.Providers.DotNetCompilerPlatform nuget 包),请在 web.config 中为 asp.net 设置 compilerOptions="/langversion:latest"。

<system.codedom>
   <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:latest /nowarn:1659;1699;1701"/>
   </compilers>
</system.codedom>
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息:


bin*_*nki 6

如果您尝试安装Microsoft.CodeDom.Providers.DotNetCompilerPlatform版本2.0.0,并且您的项目目标是4.6之前的.net版本,则它将自动使用仅支持langversion 6的roslyn的较早版本。这是因为roslyn的较新版本(包括支持csharp-7的第一个版本,至少需要.net-4.6才能运行。如果您的项目以旧版本的.net为目标,则您将看到以下错误消息:

CS1617 / langversion的无效选项“ latest”;必须为ISO-1,ISO-2,默认值或1到6之间的整数。

  1. 确保您的项目至少针对.net-4.6。如有必要,请重新定位。
  2. 如果您的项目仍使用packages.config,则必须卸载并重新安装Microsoft.CodeDom.Providers.DotNetCompilerPlatform以更新项目文件,以指向nuget软件包的.net-4.6变体。如果您使用<PackageReference/>,那么您已经准备就绪(但必须手动配置web.configsystem.codedom部分)。

  • **注意**:[`Microsoft.CodeDom.Providers.DotNetCompilerPlatform`](https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/1.0.8)曾经对[` Microsoft.Net.Compilers`](https://www.nuget.org/packages/Microsoft.Net.Compilers/),因此,如果要升级旧项目,请确保两个软件包都已更新或删除了Microsoft.Net。编译器,如果您不再需要它。 (2认同)