gpt4 book ai didi

asp.net - 与 Asp.net web 项目中的 Root Namespace 混淆

转载 作者:行者123 更新时间:2023-12-04 16:52:07 27 4
gpt4 key购买 nike

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

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

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

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

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

这有道理吗?

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

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

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

最佳答案

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

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

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

...即使您更改项目根命名空间,这也永远不会改变。如果您没有根 namespace 页面创建时间 ,你会得到:
<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/MasterPages/DefaultMasterPage.Master" CodeBehind="Home.aspx.vb" Inherits=".Home" 

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

长话短说,在开始时决定你想要的命名空间命名方法并坚持下去。

关于asp.net - 与 Asp.net web 项目中的 Root Namespace 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2240342/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com