【问题标题】:Using C# > 5, but VS still thinks I am using C# 5 and complaining about C# > 5 code使用 C# > 5,但 VS 仍然认为我在使用 C# 5 并抱怨 C# > 5 代码
【发布时间】:2017-10-12 04:15:51
【问题描述】:

经典的 ASP.NET Web 窗体项目,最初是在 DotNet 2 中完成的,并且多年来一直在升级(现在在 DotNet 4.7 上,表面上是 C# 7)。真是一团糟,但我继承了一些东西。

直到不久前,我一直在 DotNet 4.6.2 下使用 C# 6,一切运行良好。不幸的是,在一系列 DotNet 版本交换中,为了弄清楚为什么某些(其他)事情不起作用,VS 2015 社区突然失去了它正在使用 C# > 5 的提示,并且突然抱怨代码(字符串插值等)不是有效的 C# 5。

它使用 C# >6 功能编译得很好,所以很明显编译工作正常,但 VS 认为我仍在使用 C#

很久以前,当我迁移到 DotNet 4.5.2 和 C# 6 时,我已经安装了 Microsoft.CodeDom.Providers.DotNetCompilerPlatform。我没有使用菜单选项(忘了那个);我直接从 NuGet 安装它。尝试强制重新安装它,没有任何变化。尝试删除包文件夹并恢复包,也没有帮助。

我的属性页的“构建”部分没有“高级”按钮。请不要这样的建议,因为它对我没有用。

我的VS版本:

我的 this 项目/解决方案的属性页:

我的 Web.Config C# 条目(很好地分解):

<system.codedom>
  <compilers>
    <compiler
      language="c#;cs;csharp"
      extension=".cs"
      type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      warningLevel="4"
      compilerOptions="/langversion:7 /nowarn:1659;1699;1701"/>
    <compiler 
      language="vb;vbs;visualbasic;vbscript"
      extension=".vb"
      type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      warningLevel="4"
      compilerOptions="/langversion:15 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
  </compilers>
</system.codedom>

【问题讨论】:

  • 听起来您可能拥有旧版本的 Visual Studio(您的构建属性中没有“高级”按钮,无法识别新代码库)。你运行的是什么版本的 VS?
  • Visual Studio 社区 2015 版本 14.0.25431.01 更新 3
  • 下次不要交换 .NET 版本。你只能引起问题。反正VS 2015不能用C# 7
  • 切换回 DotNet 4.6.2 和 C# 6 没有区别。我仍然收到 VS Intellisense 抱怨 C# 6 项目(例如空传播运算符)的许多错误。并且使用 C# 7 代码在 C# 7 上运行该站点工作得很好(调试、本地测试和生产),所以我猜你是在谈论某些工具,例如 Intellisense,而不是任何真正的开发能力。跨度>
  • 更正:我在另一个使用 VS 2015 的 MVC 5 项目中使用 DotNet 4.7 和 C# 7,我遇到的问题为零。调试、本地和生产工作都很好,即使使用 C# 7 特定代码,Intellisense 也能像冠军一样工作。看起来我遇到的任何 > C# 5 问题都与这个遗留项目有关。

标签: c# asp.net webforms c#-6.0 c#-7.0


【解决方案1】:

这是一个网站项目,而不是 Web 应用程序项目,因此当您指示 VS 构建您的项目时,您的代码实际上并没有被编译,而是仅在运行时编译(通常是在向您的网站发出第一个 HTTP 请求时) .

您可以通过将 ASP.NET 配置为使用新的 Roslyn CodeDOM 提供程序来使用新的 C# 语言功能,这在您的 web.config 文件中完成 - 您还需要添加二进制引用。见这里:How to use C# 6 with Web Site project type?

【讨论】:

  • 你的意思是,像这样:&lt;compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:7 /nowarn:1659;1699;1701"/&gt; ?因为 AFAIK 那是 C# 7,而不是 C# 5。
  • 根据微软的说法,Web Forms 项目是一个“Web 应用程序”:msdn.microsoft.com/en-us/library/aa711425(v=vs.71).aspx
  • 另外,当我发布项目时,我所有的 *.cs 文件都被编译成 DLL 文件并放入 /bin/ 文件夹。那怎么不编译?
  • @RenéKåbis 这是可选的预编译步骤,是 Web 发布过程的一部分 - 这与构建项目不同。
  • @RenéKåbis 如果您正在进行预编译,并且如果您的App_Code 目录中有大量代码,您不妨从网站项目升级到完整的 ASP.NET Web 应用程序项目。
猜你喜欢
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多