【问题标题】:ReSharper: override default namespace to prevent "Namespace does not correspond to file location"ReSharper:覆盖默认命名空间以防止“命名空间与文件位置不对应”
【发布时间】:2016-07-15 12:12:00
【问题描述】:

给定两个项目:

  • 模型、程序集“Company.Product.Model”、默认命名空间“Company.Product.Model”
  • Model.Server,程序集“Company.Product.Model.Server”,默认命名空间“Company.Product.Model.Server”

如您所见,两个项目具有不同的默认命名空间。这是为了资源 - 两个项目都有自己的 resource.resx,其全名基于项目默认命名空间。

但是两个项目都有与“模型”相关的类,所以我希望它们位于同一个命名空间 - “Company.Product.Model”中。所以我在两个项目中都使用了这个命名空间。

问题是 ReSharper 要求我为“Model.Server”项目中的类使用命名空间“Company.Product.Model.Server”,因为它是默认(基本)命名空间:“命名空间与文件位置不对应...... ”。

我知道默认情况下它很好。但我想覆盖它 - 并告诉它我所有的类命名空间都基于“Company.Product.Model”而不更改项目的默认命名空间。

有可能吗?

【问题讨论】:

  • Resharper 不会强迫您更改命名空间。它只是建议你这样做。话虽如此,大多数选项都可以暂时禁用给定的检查。尝试单击单击“错误”命名空间时出现的灯泡/扳手,您应该能够(在它具有的菜单中)暂时禁用检查。
  • “你可以看到两个项目有不同的默认命名空间。这是为了资源”。真的吗?两者都应该有不同的命名空间,因为它们是不同的项目/程序集。对 Model.Server 中的类使用 Company.Product.Model 命名空间会给其他开发人员造成混乱,因为他们在项目中找不到他们期望的类。
  • @Pheonyx 当然我可以禁用警告,但我不想这样做。

标签: c# resharper


【解决方案1】:

如果您将选择放在解决方案资源管理器中的一个文件夹上,然后显示“属性”工具窗口,那里有一个名为“命名空间提供程序”的选项。如果您将其设置为 false,ReSharper 将不再建议您的命名空间应包含该文件夹。

在the docs查看更多信息。

【讨论】:

  • 是的,但我的问题是关于另一件事。我在“Company.Product.Model”命名空间中有一个默认命名空间“Company.Product.Model.Server”和该项目(不在文件夹中)的类 Foo。我希望 R# 将这样的名称视为正确的 ("Company.Product.Model.Foo")
  • 啊,对。对于根文件夹,您需要更改项目属性中的默认命名空间。但是,这会影响项目中的任何子文件夹。您是否希望根文件夹中的类与根文件夹中的其他类具有不同的命名空间?那么项目中的其他类呢——它们使用默认命名空间吗?您如何看待这最适合您的场景?
  • 我只想更改项目中所有类的基本命名空间,而不更改项目设置中的“默认命名空间”选项。我无法更改“默认命名空间”,因为它会影响该项目的 resx-resources 名称。
  • 啊,我明白了。我为 ReSharper 添加了一个功能请求,以允许在项目根目录中的类中使用不同的命名空间。同时,您可以查看at this StackOverflow answer,它展示了如何为嵌入式资源指定命名空间,而不是使用默认命名空间。
  • @citizenmatt 我想要的是能够为文件夹指定整个命名空间。例如,我将创建一个 System 文件夹并指定整个命名空间应为 System(而不是 MyAssembly.System),同时为 System 文件夹外的所有文件保留默认的根命名空间 MyAssembly。
猜你喜欢
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
相关资源
最近更新 更多