【问题标题】:VS2015 + Resharper: Don't use C#6VS2015 + Resharper:不要使用 C#6
【发布时间】:2016-03-14 12:11:09
【问题描述】:

我目前正在测试 VS2015,看看它对我们的解决方案有何反应。我遇到了一些麻烦,因为 VS2015 带来了 C#6,我还没有使用它(因为我的同事没有这个,因为我们的构建机器几个月前也没有它)。

我看到我应该能够为每个项目语言指定 C#5 版本。我为我们所有的项目(其中 270 个)都这样做了。现在,当我使用 C#6 功能进行编译时,出现错误,这很好。

但是,resharper 一直试图让我将表达式主体用于属性、字符串插值......

有没有办法让 Resharper 不提出这种改变?

【问题讨论】:

标签: visual-studio-2015 resharper c#-6.0


【解决方案1】:

所以我了解到您刚刚使用以下方法在 Roslyn 中禁用了 C#6 支持:
Project Properties/Build/Advanced/Language Version

但您还必须通过在解决方案资源管理器中选择一个项目,然后在属性窗口:

好消息是您可以在解决方案资源管理器中一次选择多个项目。

【讨论】:

  • 那么resharper就没有办法使用项目的信息了吗?因为我们会讨厌在恢复 C#6 时必须这样做两次
  • 据我所知,不幸的是,ReSharper 设置独立于 Roslyn 设置。但请记住:1)您可以在解决方案资源管理器中选择多个项目并一次性更改选项,或者:2)直接弄乱将为每个项目创建的 .DotSettings 文件。如果您没有任何其他特定于项目的设置,删除 DotSettings 文件应该可以解决问题。
  • ReSharper 将使用项目的默认 C# 级别。默认情况下,这是未设置的,这意味着它总是向上浮动 - 因此 VS2015 使用 C# 6。因此您可以通过项目属性 → 构建 → 高级 → 语言版本指定语言版本(在 .csproj 中设置 <LangVersion> 属性文件),ReSharper 将遵循该设置。答案中的设置可用于覆盖此值。
  • @citizenmatt 嗯,我认为这不起作用,正如 OP 在问题中所说的那样......这使我的答案无效,您能否将您的评论变成答案?之后我会删除我的。
  • 我错过了一个重要的细节,即无法实时识别对 LangVersion 的更改,并且需要重新加载项目。我也添加了我的评论作为答案。
【解决方案2】:

ReSharper 将使用项目的默认 C# 级别。默认情况下,这是未设置的,这意味着它总是向上浮动 - 因此 VS2015 使用 C# 6。因此您可以通过项目属性 → 构建 → 高级 → 语言版本(在 .csproj 文件中设置属性)和 ReSharper 指定语言版本将尊重该设置。

但是,ReSharper 不会收到值已更改的通知,因此不会即时更新,但它会遵守重新加载项目/解决方案的设置。

或者,根据@lucas-trzesniewski 的回答,您可以通过直接告诉 ReSharper 它应该针对哪个 C# 版本来覆盖项目的 LangVersion(或默认,缺少 LangVersion)。

【讨论】:

  • 在我的例子中,我使用了一个工具(github.com/khellang/LangVersionFixer)来一次更改我的所有版本,然后只有我打开了解决方案,所以 resharper 应该能够阅读它,但它不是案子。您是否看到它不起作用的任何原因?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多