【问题标题】:How can Resharper be made aware of the framework version?如何让 Resharper 了解框架版本?
【发布时间】:2009-09-03 17:27:22
【问题描述】:

我在 VS2008 中使用 Resharper 4.5.1 进行编码,但项目设置为针对 .NET Framework 2.0。

不过,Resharper 仍在提出与 .NET 3.5 框架相关的建议。例如,它告诉我应该使用集合初始化器等...

我查看了设置,但似乎找不到告诉它给出 2.0 特定建议的复选框。

【问题讨论】:

  • 集合初始化器是一种语言特性,不是 .NET 框架的一部分。您可以在针对 .NET 2.0 的项目中使用 C# 3.0 的某些部分。 Resharper 真的会建议无法编译的东西吗?
  • 嗯,不,但它确实暗示了会在目标系统上爆炸的东西,目标系统只有 .NET 2.0。
  • 那您能举出更多相关的例子吗?
  • 好吧,我认为的示例会在仅 .NET 2.0 的机器上崩溃,因为 JIT 编译器对集合初始化器一无所知。 bdukes 提供的答案实际上解决了这个问题。
  • 集合初始值设定项由 C# 3.0 编译器编译成有效的 .net 2.0 IL。它们在只有 .net 2.0 的机器上运行良好。唯一需要 .net 3.5 的 C# 3.0 功能是扩展方法和 LINQ,因为它们需要在新的 .net 3.5 程序集中定义的类型。

标签: c# visual-studio visual-studio-2008 resharper resharper-4.5


【解决方案1】:

在解决方案资源管理器中选择您的项目,然后打开属性工具窗口(标准键盘布局中的 F4 或选择项目后的视图 > 属性窗口)。在 ReSharper 部分中,您可以将语言级别属性设置为 C# 2.0。请注意,有两个单独的项目属性窗口管理不同的属性,如果您看到“应用程序”、“构建”和“调试”选项卡,则说明您在错误的窗口中。

正如其他人所说,这会影响 C# 的版本,而不是框架的版本(因为大多数 C# 3.0 更改都可以编译为面向 .NET 2.0 的程序集)。

【讨论】:

  • 在带有 ReSharper 5.1 的 Visual Studio 2010 中找不到此选项
  • @altso 你在用 C# 吗?您是否在解决方案资源管理器中选择了项目?您是否能够看到项目的其他属性(例如“调试时始终启动”或“项目文件”)?属性中是否有 ReSharper 部分?这是一个什么样的项目?
  • 感谢@bdukes 的建议。你知道这是否可以在解决方案级别上设置吗?
  • @Christo 如果您查看 ReSharper 创建的 DotSettings 文件,语言级别(对于 C# 5)看起来像 <s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">CSharp50</s:String>。您可以将其从项目级别 DotSettings 移动到解决方案级别 DotSettings 并且它似乎可以工作(而且,我假设您也可以将其移动到任何更高级别的文件)
  • @bdukes 我可以确认它也适用于用户级别。 %APPDATA%\JetBrains\Shared\vAny\GlobalSettingsStorage.DotSettings
【解决方案2】:

这些功能不是 .NET 3.5 框架功能,而仅仅是 3.5 编译器的功能。由于在 VS2008 中这是为 .NET 2 目标调用的编译器,因此它确实可以正确处理这些语法扩展。

【讨论】:

  • 这是一个有效的答案 - OP 没有使用基于对编译器的迷信和误解而可以使用的功能 运行时分离。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 2022-06-28
  • 2011-04-03
  • 1970-01-01
相关资源
最近更新 更多