C# 7 功能在 Visual Studio 2017 RC 上的 Web 项目中不起作用

C# 7 features don't work within a web project on Visual Studio 2017 RC

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

我试过在条件编译符号中添加“__DEMO__,__DEMO_EXPERIMENTAL__”,但没有用。我尝试过针对不同版本的框架并编辑了 web.config,包括 system.web.

compilationtargetFramework 标签

错误示例:

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。结果为 "Invalid option '7' for /langversion"。

solution是更新Microsoft.Net.Compilersnuget包到>=2.0.0。截至目前,要显示 2.0.0 版本,必须选中包管理器顶部的 "Include prerelease" 复选框。安装后,Language version 高级设置不必从 Default 覆盖。

我来到这里是为了回答为什么 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>
…