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)) { ... }
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"/>
针对c#6的目标是什么.只要我已经使用nuget下载了最新的Roslyn,c#7的正确设置是什么?
更新 下面是Web项目可用的编译选项的屏幕截图(它是意大利语VS2017,但应该很容易理解).没有可能在那里选择目标c#版本.
Has*_*lah 70
在网站的NuGet窗口中:
Microsoft.CodeDom.Providers.DotNetCompilerPlatformweb.config,在:system.codedom > compilers > compiler,change compilerOptions="/ langversion:6到7Ban*_*yan 25
但是下面的设置给出了编译时错误:
因此您可以将语言版本设置保留为默认值.
如果您尝试使用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+).
对于 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>
欲了解更多信息:
如果您尝试安装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之间的整数。
packages.config,则必须卸载并重新安装Microsoft.CodeDom.Providers.DotNetCompilerPlatform以更新项目文件,以指向nuget软件包的.net-4.6变体。如果您使用<PackageReference/>,那么您已经准备就绪(但必须手动配置web.config的system.codedom部分)。| 归档时间: | 
 | 
| 查看次数: | 21227 次 | 
| 最近记录: |