如何使VB.NET名称空间的行为类似于C#?

如何使VB.NET名称空间的行为类似于C#?,c#,vb.net,namespaces,C#,Vb.net,Namespaces,我正在将项目从C#转换为Visual Basic,VB.NET中的名称空间表现得很奇怪。存在某种隐藏的默认名称空间,这很烦人。我希望它的行为与C#相同,C#的工作方式与预期的一样——东西进入您为它们创建的名称空间 我通常都是和say在一起 using MyClassLibrary; 在C#和VB中 Imports MyClassLibrary Imports MyClassLibrary.MyClassLibrary 但是,如果功能相同,并且符合逻辑,那就太好了 另一个更大的问题是,我有一个

我正在将项目从C#转换为Visual Basic,VB.NET中的名称空间表现得很奇怪。存在某种隐藏的默认名称空间,这很烦人。我希望它的行为与C#相同,C#的工作方式与预期的一样——东西进入您为它们创建的名称空间

我通常都是和say在一起

using MyClassLibrary;
在C#和VB中

Imports MyClassLibrary
Imports MyClassLibrary.MyClassLibrary
但是,如果功能相同,并且符合逻辑,那就太好了

另一个更大的问题是,我有一个.tt文件,C#项目在与VB不同的命名空间中生成代码


是否有一些解决方案可以使两者在名称空间方面的行为相同?

检查项目的属性,有一个默认名称空间选项可以在VB项目中设置,但不能在C#one中设置。除了VB的“我的”名称空间之外,名称空间在不同语言中的行为应该相同。

在VB项目选项中检查根名称空间。把它清理干净


这与C#项目中的默认命名空间不同。如果更改C#项目中的默认名称空间,现有文件不会更改。但是,如果您在VB project中更改根命名空间,这将影响所有现有成员。

我只能得出结论,虽然上述从VB.NET中删除根命名空间的答案似乎有效,并且可能对某些模仿C#处理命名空间的方法的解决方案有效,其他文件(如实体设计器文件和自动生成的代码和模板名称空间)的行为不同,如果不将它们分开,则无法更改它们的行为。在以这种方式进行了一次转换之后,有些文件以与C不同的方式定义自己的名称空间时,我遇到了很大的麻烦,因此我决定最好还是接受visual basic的内置怪癖,而不是试图绕过它们。

我相信它在VB中可能被称为“根名称空间”,它们都在项目右上角属性的“应用程序”选项卡中。我的.tt文件自动生成与C#解决方案名称空间不同的代码时仍然遇到问题。。。有什么想法吗?C#解决方案生成的名称空间MyClassLibrary是正确的,但VB解决方案生成的名称空间不同,这意味着使用我的类库的东西必须导入MyClassLibrary和MyClassLibrary。MyotherNamespace不正确,C#默认名称空间和VB根名称空间的行为不相同。vb中的根名称空间在项目中的所有名称空间前面,在c#中,默认名称空间为您放在源文件中。因此,在vb.net中,如果根名称空间是MyRootNamespace,并且您有一个名称空间为MySourceNamespace的源文件,那么您访问MySourceNamespace中任何内容所必须使用的实际名称空间是MyRootNamespace.MySourceNamespace。VB将自动为您在该项目中导入根命名空间。IMHO这里的最佳做法是在您创建任何VB.Net项目并在源文件中使用命名空间后,首先从该项目中删除根命名空间。如果这是正确的,如果您使用项目a和项目B创建解决方案,要从项目A获取项目B的资源,您必须使用B.B,这不是要澄清的情况;但事实上是一样的,对吗?只是其中一个关闭并重构现有文件,而另一个没有?由于名称空间是默认设置的,我看不出它是如何相同的。@pezi:不,它不重构文件…但是当您编译项目时(而不是通过命令行编译单个文件),编译器会将根名称空间前置到所有名称空间(即使源文件未指定任何命名空间)@Konrad-啊,我明白了,谢谢你的解释,我不知道。@Konrad-这怎么可能是正确的?默认情况下,在一个空白项目中,默认名称空间设置为MyProjectName。如果创建一个新类,它将以名称空间MyProjectName开始。因此,必须忽略默认名称空间。我想,如果忽略,将使用默认名称空间指定一个。将其前置到所有内容会很奇怪。您在模板文件中指定了什么名称空间?您指定了什么输出语言?C#或VB?模板文件是自动生成的,而名称空间没有明确指定:Dim namespaceName As String=If(code.vsnamespacessuggestion(),GetObjectNamespace(ModelNamespace))