C# 在C中使用using语句强制实现完整命名空间#

C# 在C中使用using语句强制实现完整命名空间#,c#,stylecop,C#,Stylecop,我已经四处寻找了一段时间,想看看如何强制我的C#项目具有完整的名称空间路径 例如,如果类X的实际名称空间是Foo.Bar.Car.Dealer,则在visual studio中执行Ctrl+。时,有时会使用类似的语句来使用Car.Dealer;这特别成为多项目解决方案的一个问题。我一直在寻找StyleCop规则或其他可能帮助我完成这项工作的东西 有什么帮助或想法吗 编辑 只有当using类位于同一名称空间前缀下时,上述语句才成立。下面是完整的代码示例: 档案:X.cs namespace Fo

我已经四处寻找了一段时间,想看看如何强制我的C#项目具有完整的名称空间路径

例如,如果类X的实际名称空间是
Foo.Bar.Car.Dealer
,则在visual studio中执行
Ctrl+。
时,有时会使用类似
的语句来使用Car.Dealer
;这特别成为多项目解决方案的一个问题。我一直在寻找StyleCop规则或其他可能帮助我完成这项工作的东西

有什么帮助或想法吗

编辑

只有当using类位于同一名称空间前缀下时,上述语句才成立。下面是完整的代码示例:

档案:X.cs

 namespace Foo.Bar.Car.Dealer {
   class X {}
 }
文件:UsingClass.cs

 namespace Foo.Bar.Another.ClassPath {
  using Car.Dealer;
  class UsingClass {
    private X _x;
  }
 }

VS选择了
使用Car.Dealer
,但我想强制使用Foo.Bar.Car.Dealer

我不知道2012年之前的版本,但从那时起,当遇到未知类型时弹出的图标提供了通过使用指令添加名称空间或简单地为完整名称空间引用的类型添加前缀的功能

如果您不想通过using指令添加名称空间(这类似于使用Foo.Bar.Car.Dealer;)

然后在您的示例中,您只需将您的类型
X
引用为
Foo.Bar.Car.Dealer.X

例如:

//assuming your X type is instantiable
Foo.Bar.Car.Dealer.X myX = new Foo.Bar.Car.Dealer.X();

我想要一个编译时规则来强制执行这一点。也许你可以为此使用T4创建一个模板?这将涉及到特定的类型,并使用反射,将完整的名称空间附加到每个引用?同样,在编译时强制执行某些操作,而不是IDE工具或模板生成,这总是很好的。我只是注意到我的问题不完整,因此,我用示例进行了修改。当解决方案扩展到多个项目时,它会导致名称空间冲突。是的,原始问题引起的问题似乎不是您真正的问题:)。我不知道,我能想到的是创建代码,将完整的名称空间附加到一组特定的类(比如,那些用您选择的自定义属性标记的类)。就像我在我的“答案”中的评论中添加的那样,
这特别成为多项目解决方案的一个问题。
您遇到了什么样的问题?您可能会遇到。