我刚开始使用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#版本。
答案 0 :(得分:65)
在网站的NuGet窗口中:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
web.config
中,
在:system.codedom > compilers > compiler
下,
更改compilerOptions
=&#34; / langversion: 6到7 答案 1 :(得分:25)
我能够使用默认语言设置进行编译,但不能使用C#7选项进行编译。
但是以下设置会产生编译时错误:
因此您可以将语言版本设置保留为默认值。
如果您尝试使用Roslyn而不使用Visual 2017默认编译器构建,那么您可能需要进行一些更改
选择您的项目名称,然后右键单击&gt;&gt;属性窗口&gt;&gt;在“条件编译符号”文本框__DEMO__,__DEMO_EXPERIMENTAL__
<强>更新强>
要使用C#7.0,您需要使用2.0+版本 Microsoft.Net.Compilers
安装最新版本的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之间的整数。
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的引用,并且看来(目前)有效。