内联变量声明不编译

pru*_*dan 44 c# .net-core c#-7.0 visual-studio-2017

我在Visual Studio 2017中收到了一条消息,具体来说, IDE0018 Variable declaration can be inlined.

所以我尝试使用内联变量声明,就像在visual studio 2017发行说明中提到的那样,但我无法让我的项目进行编译.

它没有显示错误消息,但输出显示" Rebuild All failed..... error CS1525: Invalid expression term 'int'"

错误仅显示在输出中,而不是错误列表中的实际错误.

这是我正在使用的代码失败的实际示例.

if (int.TryParse(ExpYear, out int IExpYear))
  {
    if (IExpYear < DateTime.Now.Year || IExpYear > DateTime.Now.AddYears(10).Year)
    {
      e += "Expiration Year is invalid.\n";
    }
  }
  else
  {
    e += "Expiration Year is not a number.\n";
  }
Run Code Online (Sandbox Code Playgroud)

如果我还原更改,它会按预期编译.有可能我不是以某种方式使用c#7编译器吗?

谢谢.

更新:我在Build> Advanced中找到了语言设置并将其设置为C#7.0.现在构建项目会给我这个错误:

CSC:错误CS1617:/ langversion的选项'7'无效; 必须是ISO-1,ISO-2,默认值或1到6范围内的整数.

pru*_*dan 39

我能够通过安装Microsoft.Net.Compilersv2.0.0 -rc3的nuget包来解决这个问题,之前安装的唯一版本是1.3.2.

我仍然不明白为什么如果安装的编译器不支持这个,则会出现intellisense和编译器错误.

  • 您应该注意Visual Studio For Mac不支持"Microsoft.Net.Compilers".*PS我不能评论声誉的原因,所以我只能写一个答案.* (3认同)

小智 15

如果上述答案对您不起作用,因为它对我不起作用,请执行以下操作:

打开csproj文件并检查升级后是否在文件中引用了以下包,如果是,则将其删除.

<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')" />
Run Code Online (Sandbox Code Playgroud)

接下来,检查"Project ToolsVersion".它必须是15.0,它可能是14.0,所以你必须改变它.

<Project ToolsVersion="15.0" .../>
Run Code Online (Sandbox Code Playgroud)

然后只需重新加载解决方案就可以了.请注意,如果您选择"重新加载项目",它将给您一个错误而不加载它.