【问题标题】:C# 7 features don't work within a web project on Visual Studio 2017 RCC# 7 功能在 Visual Studio 2017 RC 上的 Web 项目中不起作用
【发布时间】:2017-07-02 04:29:42
【问题描述】:

我在解决方案中有几个项目,并且 C# 7 功能(例如元组和 throw 表达式)在所有库项目中都可以正常工作,但是有一个(非核心)Web 项目由于以下原因无法编译C# 7 功能上的错误。编译后,错误窗口很快就会自行清除,这可能是因为 IDE/编辑器编译相同的单元而没有错误。我必须使用输出窗口来查看编译器错误。就好像 IDE/编辑器假设 C# 7,但构建中使用的编译器不是。

我尝试在条件编译符号中添加“__DEMO__,__DEMO_EXPERIMENTAL__”,但无济于事。我已经尝试针对不同版本的框架并编辑了 web.config,包括 system.web 的 compilation 和 targetFramework 标签。

错误示例:

if (!config.Properties.TryGetValue(modelId, out var model)) // error CS1003: Syntax error, ',' expected
if (modelDescription is ComplexTypeModelDescription complexTypeModelDescription) // error CS1026: ) expected

这是项目的 csproj 文件的前几行:

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.3\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.3\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />

更新:我尝试使用 VS 2017 RC 中的最新模板创建一个新的 Web 项目并复制到我的源文件中。一样。

我也尝试过明确设置 Project |属性 |构建 |高级 |语言版本为 7。导致“/langversion 的选项 '7' 无效”。

【问题讨论】:

    标签: asp.net visual-studio-2017 c#-7.0


    【解决方案1】:

    solution 是将 Microsoft.Net.Compilers nuget 包更新为 >=2.0.0。到目前为止,要显示 2.0.0 版本,必须选中包管理器顶部的“包含预发布”复选框。安装后,Language version 高级设置不必从 Default 覆盖。

    【讨论】:

    • 花费了一个多小时来构建和清理我的项目,但每次都失败并出现非常错误的错误。我什至重新安装了VS2017。然后我找到了你的答案,它立即解决了问题。谢谢!
    • 我想知道这个答案没有被标记为答案!非常感谢!
    • 为什么会这样? dll 是否低于 2.0 版,对项目施加了某种“最大语言级别”?我注意到安装了 v 1.3,我无法将项目类型设置为使用语言版本 7,即使它是一个可选选项。我收到一条错误消息,说它必须是版本 1 - 6。不知何故,该 DLL 似乎限制了项目的最大允许语言版本。
    • @Triynko,是的,原因是 C# 7 编译器功能在该 dll 的新版本中实现。较旧的编译器 -> 较旧的语言版本。
    【解决方案2】:

    我来到这里试图回答为什么 C#7 功能在 VS2017 中不起作用。我刚刚升级了一个现有项目,就像答案所说的那样,最后得到了一条关于编译器 DLL 正在使用中并且 VS 需要重新启动的消息。

    之后我可以在 IDE 中输入 C# 7 代码,但编译任何新功能使用时总是会失败。原来 .csproj 文件本身具有新旧编译器的导入,如下所示。这些没有显示在项目的参考列表中。我删除了旧的导入行,一切顺利。

    <?xml version="1.0" encoding="utf-8"?><Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
      <Import Project="packages\Microsoft.Net.Compilers.2.8.2\build\Microsoft.Net.Compilers.props" Condition="Exists('packages\Microsoft.Net.Compilers.2.8.2\build\Microsoft.Net.Compilers.props')" />
      <Import Project="..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props')" />
      <Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
      <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
      <PropertyGroup>
    …
    

    【讨论】:

      猜你喜欢
      • 2017-11-19
      • 2017-07-29
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 2017-04-03
      • 2017-04-02
      • 1970-01-01
      • 2017-04-03
      相关资源
      最近更新 更多