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

时间:2017-03-12 06:59:12

标签: 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+版本。

我对此主题的研究表明,我应该定位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项目的可用 Compile 选项的屏幕截图(它是意大利语VS2017,但应该很容易理解)。没有可能在那里选择目标c#版本。

Compile options

6 个答案:

答案 0 :(得分:65)

在网站的NuGet窗口中:

  1. 卸载Microsoft.CodeDom.Providers.DotNetCompilerPlatform
  2. 重新安装
  3. web.config中, 在:system.codedom > compilers > compiler下, 更改compilerOptions =&#34; / langversion: 6到7

答案 1 :(得分:25)

我能够使用默认语言设置进行编译,但不能使用C#7选项进行编译。 enter image description here

但是以下设置会产生编译时错误:

enter image description here

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

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

选择您的项目名称,然后右键单击&gt;&gt;属性窗口&gt;&gt;在“条件编译符号”文本框__DEMO__,__DEMO_EXPERIMENTAL__

中构建并添加以下两个选项

enter image description here

<强>更新

  

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

enter image description here

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

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

答案 2 :(得分:5)

如果您尝试安装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.config的{​​{1}}部分)。

答案 3 :(得分:3)

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

Build Configuration Language Version

如果您正在使用.NET编译器平台的CodeDOM提供程序(&#34; Roslyn&#34;)(例如Microsoft.CodeDom.Providers.DotNetCompilerPlatform nuget包),请设置compilerOptions =&#34; / langversion:latest&#34 ;在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.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:latest /nowarn:1659;1699;1701"/>
   </compilers>
</system.codedom>

欲了解更多信息:

答案 4 :(得分:1)

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

/Bin/roslyn 

包含NuGet软件包文件夹中的文件

/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0/tools/Roslyn472
在安装新版本的nuget期间未替换项目文件夹中的

csv.exe。 替换文件后,效果很好。

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

答案 5 :(得分:0)

我引用的是自定义项目A,而引用的是另一个自定义项目B。 我刚刚从A读到B的引用,并且看来(目前)有效。