我的一位同事刚刚遇到一个奇怪的编译器怪癖,它正在导入看起来像“根”命名空间的东西。
问题在于,当我们添加对共享库的引用时,它的命名空间为Root.Security
,它会在每个文件中抱怨使用类Root.Entity.X
(即使它没有using Root
或using Root.Security
。
实施例
Root.Entities
大会 Security.cs
namespace Root.Entities
{
public class Security { } // Represents a Security in the sense of financial instrument
}
Root.Security
大会此程序集具有Active Directory +权限共享帮助程序
SecurityHelper.cs
namespace Root.Security
{
public class SecurityHelper { } // AD/Permission helper
}
Root.Gui
大会 Main.cs
using Root.Entities;
namespace Root.Gui
{
public class Main
{
public Main()
{
// The following causes an error
// if Root.Security is add as a reference to the project.
// even without adding `using Root.Security`
var security = new Security();
}
}
}
我的问题是,为什么编译器抛出错误并选择Security
作为命名空间,即使我们在任何地方都没有using Root
或using Root.Security
!它似乎是自动在某处添加using Root
?
N.B。目前我们已根据设置using SecurityEntity = Root.Entities.Security
修正了
答案 0 :(得分:1)
我无法解释"为什么?" - 我可以重复它,但有一些解决方法:
选项1:完全符合类型:
var security = new Root.Entities.Security();
选项2:将using
指令移到命名空间声明中:
namespace Root.Gui
{
using Root.Entities;
public class Main
{
public Main()
{
// The following causes an error
// if Root.Security is add as a reference to the project.
// even without adding `using Root.Security`
var security = new Security();
}
}
}
我有点惊讶using
别名方法没有修复它:
using Security = Root.Entities.Security;
但你可以使用选项3作弊:
using SecurityRenamed = Root.Entities.Security;
...
var security = new SecurityRenamed();