我在解决方案中有几个项目,C#7的功能,如元组和throw表达式,在所有库项目中都可以正常工作,但是有一个(非Core)Web项目由于C#7功能上的错误。在编译之后,错误窗口会快速清除,大概是因为IDE /编辑器编译相同的单元而没有错误。我必须使用输出窗口来查看编译器错误。就像IDE /编辑器假设C#7一样,但构建中使用的编译器不是。
我尝试在条件编译符号中添加“__DEMO__,__DEMO_EXPERIMENTAL__
”,但无济于事。我已经尝试定位不同版本的框架并编辑了web.config,包括compilation
的{{1}}和targetFramework
标记。
示例错误:
system.web
以下是该项目的csproj文件的前几行:
if (!config.Properties.TryGetValue(modelId, out var model)) // error CS1003: Syntax error, ',' expected
if (modelDescription is ComplexTypeModelDescription complexTypeModelDescription) // error CS1026: ) expected
更新:我尝试使用VS 2017 RC中的最新模板创建一个新的Web项目,并复制我的源文件。一样。
我也尝试过显式设置Project |属性|建立|高级|语言版本为7.结果为“/ langversion”的“无效选项'7”。
答案 0 :(得分:23)
solution是将Microsoft.Net.Compilers nuget包更新为> = 2.0.0。截至目前,对于2.0.0版本的出现,"包括预发布"必须选中包管理器顶部的复选框。安装此选项后,Language version
高级设置不必从Default
覆盖。
答案 1 :(得分:0)
我来到这里试图回答为什么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>
…