Vb.net 从项目引用获取intellisense中显示的类型时出现问题

Vb.net 从项目引用获取intellisense中显示的类型时出现问题,vb.net,visual-studio,visual-studio-2008,namespaces,reference,Vb.net,Visual Studio,Visual Studio 2008,Namespaces,Reference,我收到一个编译器错误,说明没有定义“Acme.Business.User” 我有一个名为“Acme.Business”的类库项目,它将“Acme.Business”作为程序集名称和根命名空间。没有一个类使用“Namespace”关键字,因此它们都应该存在于名称空间“Acme.Business”中 我还有一个名为“Acme.Web”的类库项目,该项目引用了“Acme.Business”。同样,“Acme.Web”是项目名称、程序集名称和根命名空间 这是奇怪的部分。如果我向“Acme.Web”添加一

我收到一个编译器错误,说明没有定义“Acme.Business.User”

我有一个名为“Acme.Business”的类库项目,它将“Acme.Business”作为程序集名称和根命名空间。没有一个类使用“Namespace”关键字,因此它们都应该存在于名称空间“Acme.Business”中

我还有一个名为“Acme.Web”的类库项目,该项目引用了“Acme.Business”。同样,“Acme.Web”是项目名称、程序集名称和根命名空间

这是奇怪的部分。如果我向“Acme.Web”添加一个类,我可以在顶部键入“Imports Acme.”,并看到两个名称空间都以intellisense的形式出现,正如您所期望的那样,但是如果我尝试执行“Dim x as New Acme.Business.User”,那么“Business”就不会出现在intellisense中,我会收到一个错误消息,说“Acme.Business.User”没有定义


我看不出我做错了什么!请帮忙。谢谢。

我想您可能误解了project默认名称空间的工作原理。默认名称空间是一个项目文件设置,当您向项目中添加新的类文件时,它只告诉Visual Studio要向每个文件添加哪个名称空间。如果您已从代码文件中删除了所有这些名称空间,则您的类型不存在于该名称空间中


这意味着Acme.Business程序集中的所有类型都位于全局命名空间中,这可能不是您想要的。为了获得所需的行为,您需要将名称空间添加回代码文件中,因为这是编译器使用该名称空间创建类型名的唯一方法

好的,我发现我看到的行为是因为我在Acme.Web的代码中声明了名称空间,就像我在C#中使用的那样,这是为了完全限定它,即Namespace Acme.Web.UI.WebControls。我没有意识到在VB.NET中它是建立在为根命名空间指定的名称之上的。我删除了在项目的“根命名空间”设置中指定的部分,它开始工作。因此,Acme.Web代码中的名称空间现在看起来像名称空间UI.WebControls

感谢您的响应。我认为情况并非如此。可能使用C#,但是使用VB.NET,如果我添加一个新类,它不会在名称空间中存根。另外,在Acme.Business中引用类型可以在我的代码隐藏页面中正常工作,所以我认为Acme.Business是可以的,但是Acme.Web必须改变。你是对的,它们位于全局名称空间中,但它们仍然位于该名称空间下指定的根名称空间中,因为我对它们的理解是:“Dim x as new global.Acme.Business.User”。我不知道发生了什么变化,因为我以前从未在代码中指定过名称空间,而且它工作正常