内联变量声明无法编译

54

我在Visual Studio 2017中收到了一条消息,具体来说是:IDE0018 变量声明可以内联。

因此,我尝试按照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";
  }
如果我撤销更改,它会按预期编译。有可能我没有以某种方式使用c#7编译器吗?
谢谢。
更新:我在“生成”>“高级”中找到了语言设置并将其设置为C# 7.0。现在构建项目会给我这个错误:
CSC:错误CS1617:/langversion的选项无效;必须是ISO-1、ISO-2、默认或范围在1到6之间的整数。

你的代码在我的VS2017RC中编译得很好,无论是在.Net Framework还是.Net Core项目中。你能描述一下这是发生在什么样的项目中,并提供完整的重现步骤或分享整个项目吗?另外,你是否正在运行最新版本的VS2017RC?我认为它有一些更新,可能会对此产生影响。 - svick
这可能意味着你在某种程度上正在使用旧的编译器。这只发生在这个项目中吗?如果你创建一个全新的项目,你是否也会遇到同样的问题? - user743382
我非常确定我正在运行最新版本的VS 2017 RC,我每天都运行更新程序。我最初是在VS 2015中启动了这个应用程序,然后将其移动到了VS 2017。当这段代码不起作用时(以及其他一些问题),我决定从头开始重建它,并在VS 2017中创建一个新项目。问题仍然存在。 - prudan
那个错误意味着安装出了问题。由于某种原因,VS正在使用旧的编译器。如果您创建一个项目时有同样的问题吗?如果是,您应该修复您的VS 2017安装。 - Panagiotis Kanavos
我认为安装可能存在问题。我不仅创建了一个新项目,而且在安装工具未发现任何需要修复的内容后,我还完全重新安装了VS2017。 - prudan
显示剩余4条评论
3个回答

43

我通过安装v2.0.0-rc3版本的Microsoft.Net.Compilers NuGet包解决了这个问题,之前唯一安装的版本是1.3.2

我仍然不明白为什么如果已安装的编译器不支持此项功能,智能感知和编译器错误会出现。


3
请注意,Microsoft.Net.Compilers 不受 Visual Studio For Mac 支持。注:由于声望等级限制,我无法进行评论,因此只能写答案。 - isabasan
对我来说,更新 Microsoft.Net.Compilers 包使得项目在本地运行良好,但无法在我发布到的服务器上构建(动态编译)。因此请注意,如果您想支持它,则可能需要多个步骤。 - Aske B.

17
如果上述答案对您不起作用,就像对我一样,请执行以下操作:
打开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')" />

接下来,检查“Project ToolsVersion”。它必须是15.0,但很可能是14.0,所以您需要更改它。
<Project ToolsVersion="15.0" .../>

然后只需重新加载解决方案,就可以开始了。请注意,如果选择“重新加载项目”,它会给您一个错误并且无法加载。


1
这对我来说是正确的答案,我从VS 2015升级到了2017,并且过去也安装了Compilers 1.3.2。即使升级到2.0.1后,csproj中仍然有对它的引用。 - Paul Becker
是的,这对我也起作用了。我的csproj文件一团糟。谢谢! - gsharp
1
{btsdaf} - Matt
1
在我们的情况下,除了将项目文件(.csproj)中的ToolsVersion14.0更改为15.0之外,由于编译是由Jenkins任务触发的,我们还必须安装更新版本的MSBuild。安装完“Visual Studio 2019构建工具”后,我们获得了MsBuild版本16.0,此版本成功编译了所有新的C#功能。 - Julio Nobre

0

设置使用最新发布的C#编译器:

在Visual Studio中(我使用的是Visual Studio 2017),右键单击项目并选择“属性”

在左侧菜单栏中选择“生成”选项卡

点击“生成”窗口右下角的“高级...”按钮

在“常规”下,选择“语言版本”右侧的列表框中的“C#最新次要版本(latest)”

此外,请确保使用Visual Studio Installer使Visual Studio IDE保持最新状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接