2010-09-27 112 views
1

我有一个解决方案,其中包含许多项目都使用相同的根名称空间。没有代码文件显式地命名一个名称空间。因此,可以说根名称空间是ExampleRootNamespaceVB.NET命名空间问题有关明确(命名)与隐式(全局或根)名称空间

现在,当我想将明确命名的命名空间添加到我正在处理的其中一个代码文件中时,就会出现问题。我希望能够将该代码从程序集的其余部分中分离出来,以便能够对它运行FxCop。所以我在代码文件中加入了类似Namespace Interfaces.CSV的东西。

这会导致引用此程序集的任何代码需要说Imports ExampleRootNamespace.Interfaces.CSV。到现在为止还挺好。我甚至可以对组件运行FxCop。现在的问题是,在其他组件,我不能说任何更长的东西,如:

Public class frmInputBoolean Inherits 
ExampleRootNameSpace.frmFormTemplate 

的Visual Studio现在要求我重新命名的命名空间:

Public class frmInputBoolean Inherits 
    Global.ExampleRootNameSpace.frmFormTemplate 

有数以百计的错误与此有关。所以我的问题是:

1)为什么基本上会在根目录下命名空间首次导致程序问题?

2)有没有任何解决方法来解决这个问题,而不重命名?

我也想补充一点,关于ExampleRootNamespace.Interfaces.CSV我没有在代码库中的任何地方引用它。我目前只是从单元测试项目中引用它。所以我不明白为什么添加这个命名空间会导致问题。

回答

1

那么存在你,看来这可能是在Visual Studio 2008中,但一个bug正如代码并没有改变与所需的问题Global前缀不再存在。

我这样说是因为我查出来有问题的代码文件中的一个,并试图增加(如Meakins建议):

Imports ExampleRootNamespace = Global.ExampleRootNamespace 

当我这样做两件事情。

1)错误突出显示和错误纠正建议已被删除,并且VisualRoot可识别ExampleRootNamespace。此外,代码现在编译。

2)Imports ExampleRootNamespace = Global.ExampleRootNamespace由于在导入语句中使用Global而无效。视觉工作室说:“'全球'不允许在这种情况下,标识符预计。”这意味着这行代码不会编译。所以我把它们一起移除。奇怪的是,尽管它没有在那里(因此代码返回到以前)没有更多的错误。

我也重新启动了视觉工作室(但是在做完上述之后)。如果你问我,这很奇怪!

1

在C#中尝试利用USING运算符与您的名称空间。

using ExampleRootNamespace = newExampleRootNamespace; 

在有全球性问题的。

可悲的是,我不相信一个简单的解决方案在VB.NET

+0

在Vb中它将是Imports。我建议“Imports ExampleRootNamespace = Global.ExampleRootNamespace”http://msdn.microsoft.com/en-us/library/7f38zh8x(VS.71).aspx – MarkJ 2010-09-27 14:34:12

+0

这将无法正常工作,因为您无法使用“全局”进口报表。看到我自己的回答这个线程。感谢Meakins和MarkJ的建议。它确实有助于让代码进行编译。 – Matt 2010-09-27 14:40:49