【问题标题】:Unable to build while using C# 7.0 features使用 C# 7.0 功能时无法构建
【发布时间】:2018-11-28 15:46:50
【问题描述】:

最近我在一个项目中提取了最新代码,该代码对一些同事来说编译得很好,但对我来说却不是。代码中有一行简单的代码导致它无法构建:

if (x is null || y is null)
    return false;

给了我所有这些编译错误:

) expected 
Type Expected 
; expected 
Type expected 
; expected 
} expected

我觉得这是编译器的问题?我在 Visual Studio 2017 Enterprise 15.6.3.Net 4.7.03056 上。该项目引用 Microsoft.Net.Compilers 2.4.0 并在 Properties > Build > Advanced 中设置为 C# latest major version (default)

我不确定我缺少什么来构建它。将我的环境与同事进行比较似乎是相同的——有什么想法吗?谢谢。

编辑:无法将其更改为 ==,因为它是 == 的覆盖 - 加上这只是避免了这种情况,并没有解决它。

【问题讨论】:

  • .csproj 中的目标框架版本是什么?
  • v4.5.2
  • 请注意is nullc#-7.0,而不是您在标签中写的c#-6.0...您使用的是msbuild 还是Visual Studio(因为有标签)?
  • @naspinski 在这里可以工作...您可以尝试卸载包编译器并重新安装它
  • 或者尝试使用 msbuild 编译解决方案(从 Visual Studio 的命令提示符 msbuild yoursolution.sln 并尝试查看它正在使用的编译器(您应该看到 X:\solutionpath\packages\Microsoft.Net.Compilers.2.4.0\build..\tools\csc.exe

标签: c# visual-studio-2017 roslyn c#-7.0


【解决方案1】:

在我的 .csproj 文件中,我有几个流氓 if exists 导入,它们过去出于任何原因被放置在那里。因为他们在我的同事环境中不存在,所以对他们来说不是问题。

 <Import Project="..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props')" />
 <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="..\..\..\Dependencies\Packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.3\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\..\..\Dependencies\Packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.3\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
 <Import Project="..\..\..\Dependencies\Packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props" Condition="Exists('..\..\..\Dependencies\Packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props')" />

我假设由于后一个导入是较低版本,并且碰巧存在,它们会覆盖以前的导入。

也就是说,我只是删除了最后两个导入,一切正常 - 感谢大家的输入!

【讨论】:

  • 仍然不清楚为什么你应该有一个不同的 csproj。 csproj 是一个受版本控制的文件。与众不同应该是一个危险信号。
  • 没有什么不同,不管出于什么原因,他们没有第二个目录,而我有。
  • 我看到有一些Condition="Exists 所以没有错误。
猜你喜欢
  • 2013-07-28
  • 2017-08-20
  • 2012-01-23
  • 2022-01-04
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 2014-11-25
相关资源
最近更新 更多