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

在asp.net应用程序中启用c#7,c#,asp.net,visual-studio-2017,c#-7.0,C#,Asp.net,Visual Studio 2017,C# 7.0,我刚开始在Visual Studio 2017中开发我的旧解决方案。只需在旧IDE中打开解决方案就可以无缝地工作。 c#应用程序项目现在默认为c#7.0编译器。这些项目(编译/高级)的属性页允许轻松选择编译器的目标语言版本,默认为最新版本 但是,我找不到在asp.net web项目中启用c#7.0的方法。 如果我写一份声明,如: if (int.TryParse("1", out int myInt)) { ... } IDE警告我需要使用该语言的7+版本 我对这个主题的研究表明,我应该针对w

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

但是,我找不到在asp.net web项目中启用c#7.0的方法。 如果我写一份声明,如:

if (int.TryParse("1", out int myInt)) { ... }
IDE警告我需要使用该语言的7+版本

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

我现在得到的是:


目标是c#6。如果我已经用nuget下载了最新的Roslyn,那么c#7的正确设置是什么

更新 下面是一个web项目可用编译选项的屏幕截图(它是意大利语VS2017,但应该很容易理解)。无法在此处选择目标c#版本


我可以使用默认语言设置编译它,但不能使用C#7选项。

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

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

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

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

更新

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

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


因此,最好的解决方案是安装最新版本的Microsoft.Net.Compilers(2.0+)。

在网站的NuGet窗口中:

  • 卸载Microsoft.CodeDom.Providers.DotNetCompilerPlatform
  • 重新安装它
  • web.config
    中, 在:
    system.codedom>compilers>compiler
    下, 将编译器选项更改为7
  • 对于C#7.x支持,请将project的构建配置语言版本设置为C#最新次要版本(最新)

    如果您正在使用.NET编译器平台(“Roslyn”)的CodeDOM提供程序(例如Microsoft.CodeDOM.Providers.DotNetCompilerPlatform nuget软件包),请在asp.NET的web.config中设置compilerOptions=“/langversion:latest”

    
    
    有关更多信息:


    如果您尝试安装Microsoft.CodeDom.Providers.DotNetCompilerPlatform版本2.0.0,并且您的项目的目标版本是.net版本早于4.6,那么它将自动使用旧版本的roslyn,该版本最多只支持langversion 6。这是因为更新版本的roslyn,包括支持cs的第一个版本harp-7,至少需要.net-4.6才能运行。如果您的项目针对的是较旧版本的.net,您将看到错误消息:

    CS1617/langversion的“最新”选项无效;必须是ISO-1、ISO-2、默认值或1到6范围内的整数

  • 确保项目的目标至少为.net-4.6。如有必要,请重新确定目标
  • 如果您的项目仍然使用
    packages.config
    ,则必须卸载并重新安装
    Microsoft.CodeDom.Providers.DotNetCompilerPlatform
    ,以更新项目文件,使其指向nuget包的.net-4.6变体。如果您使用的是
    ,则一切就绪(但您必须手动配置
    web.config
    system.codedom
    部分)

  • 我引用的是一个自定义项目a,它引用的是另一个自定义项目B。
    我刚刚读了从A到B的参考资料,它似乎起了作用(目前)。

    您需要替换项目文件夹中的文件

    /Bin/roslyn 
    
    使用NuGet软件包文件夹中的文件

    /packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0/tools/Roslyn472
    
    在安装新版本的nuget期间,项目文件夹中的csv.exe未被替换。 在替换文件后,它工作得非常好


    不要忘记将.Net版本更改为项目属性中的最新版本。

    是否尝试更改编译器选项?msdn文档说明它会影响到这一点。我尝试将其设置为/langversion:7。不编译。它返回:CS1617:langversion的无效选项“7”;必须是ISO-1、ISO-2、默认值或范围为1到6的整数。在C中为6rosoft在visual studio中添加了一个子菜单,名为“项目”>“启用C#6”“Julien,我希望微软能提供更简单的工具,但现在他们有两个软件包可以通过nuget获得:Microsoft.Net.Compilers(刚刚更新到v2.0.1)和Microsoft.CodeDom.Providers.DotNetCompilerPlatform compiler as a service(Roslyn),这两个软件包在v1.0.3(去年12月发布)中.我是否应该假设c#7尚未准备好用于asp.net?BankeTesthVar,即“高级构建设置”对话框仅适用于桌面和控制台应用程序。不适用于web项目。在web项目中,您必须手动编辑web.config文件。我已下载了编译器的版本2,但设置/langversion:7仍然会导致编译器错误。@davidthegrey,我不认为语言版本与控制台或w有任何关系eb应用程序。我能够使用ASP.NET MVC应用程序(本机框架和.NET核心)打开高级构建设置选项。我已经编译了ASp.NET核心Web应用程序以及C#7.0语言设置选项。您是否使用最新版本的Visual Studio 2017?我已经下载了2017年3月7日发布的最新版本的Visual Studio 2017 Enterprise。对于ASp.NET核心Web应用程序,我已经设置了语言版本