【问题标题】:Confusion with Root Namespace in Asp.net web project与 Asp.net Web 项目中的根命名空间混淆
【发布时间】:2011-01-15 11:15:52
【问题描述】:

我有一个 VS2008 解决方案,有 2 个项目,WebUI 和 Domain; WebUI 引用域

WebUI项目中的Root Namespace为:MyCompany.MyProjectName.WebUI
域项目中的根命名空间是空白的。 (所有类的命名空间都是手动声明的)

所以一切正常,直到我尝试通过完全限定的路径引用 Domain 中的类: MyCompany.MyProjectName.Domain.EntityClasses.SomeClassName

VS 无法找到该类。 但是,如果我在代码文件的顶部这样做: 导入 MyCompany.MyProjectName.Domain.EntityClasses

....然后它可以看到它。 (就像 SomeClassname,而不是完全限定的名称)

这有意义吗?

所以,然后我清除了我的 WebUI 根命名空间,瞧,完全限定的声明就可以工作了。但是,这样做似乎会使我在我的页面上注册的所有用户控件无效。似乎解决这个问题的唯一方法是在每个用户控件的代码隐藏中,手动添加 MyCompany.MyProjectName.WebUI 的命名空间 ...这可能是有道理的,因为页面的命名空间可能仍然保留了根命名空间值。但是,如果我要创建一个全新的 aspx 页面并在其上放置一个用户控件(这是在手动添加命名空间之前),那么即使该页面也无法正确注册它。然而,uwer 控件在设计视图中正确呈现....所以 VS UI 似乎能够正确解决它,但编译器似乎不能。

因此,据我所知,我至少可以通过将用户控件手动包装在适当的命名空间中来使事情正常工作。为什么这对于没有指定命名空间的 aspx 页面来说是必要的,以查看用户控件,似乎没有意义。

我误解了一些基本原则吗??

【问题讨论】:

    标签: asp.net vb.net namespaces


    【解决方案1】:

    好的,我认为这是问题所在:

    当您为项目指定根命名空间并创建新的 aspx 页面时,aspx 页面将在其定义中硬编码根命名空间在创建时,即:

    <%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/MasterPages/DefaultMasterPage.Master" CodeBehind="Home.aspx.vb" Inherits="yourCompany.yourApp.WebUI.Home" %>
    

    ...即使您更改项目根名称空间,这也永远不会改变。如果您在创建页面时没有根名称空间,您会得到:

    <%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/MasterPages/DefaultMasterPage.Master" CodeBehind="Home.aspx.vb" Inherits=".Home" 
    

    因此,如果您在中途更改根命名空间,所有先前的 aspx 页面都将其命名空间硬编码为旧值。但是,我认为 aspx 背后的代码确实 会对根命名空间的删除做出反应,因此您开始使用用户控件等出现奇怪的行为,并且您有进入所有代码背后并在其中显式设置匹配的命名空间以使页面正常工作。在这种情况下,我认为最好的办法是在所有 aspx 文件中搜索命名空间的显式定义(在 Inherits 标记中)并将其删除。我认为,如果您愿意,您仍然应该能够在代码隐藏中显式设置命名空间,aspx 将继承该命名空间。虽然不是 100% 确定。

    长话短说,一开始就决定你想要哪种命名空间命名方法并坚持下去。

    【讨论】:

      【解决方案2】:

      我建议您使用 Web 应用程序项目格式来避免这种事情。网站项目对于简单网站以外的任何事物都是一种倒退。

      【讨论】:

        猜你喜欢
        • 2014-04-14
        • 2012-09-06
        • 2012-03-03
        • 2012-03-29
        • 1970-01-01
        • 2022-06-17
        • 2013-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多