2

“ASP”命名空间似乎是一个生成的,因为它没有在网站项目的源代码中使用,任何地方(或至少没有被网站程序员明确使用)。我想知道它是如何完全实现的。

例如:
MSBuild 是否有责任推动 ASP 命名空间的创建,如果是,该指令在哪里找到?我知道 C# 编译器不会凭自己的意愿创建命名空间,因此必须将 ASP 命名空间输入其中,即使网站程序员不使用它也是如此。也许它是由不同的工具生成到源代码中的。“临时 ASP.NET 文件”文件夹可能与它有关。正如你所看到的,我想要所有血淋淋的细节来解锁和理解这个命名空间......

Visual Studio 似乎有允许使用 ASP 命名空间的工具(对它的 IntelliSense 支持),但这掩盖了我对它的理解。

网站中的“ASP”命名空间是如何从头到尾实现的?

(我还没有找到解释这一切的好文章。)


这里的 ASP 命名空间显示在 .NET Reflector 中。(这张图片取自Rick Strahl 的博客

在此处输入图像描述

4

3 回答 3

1

命名空间可ASP.用于动态加载自定义控件,使强制转换工作更安全。

您可以控制自定义控件在 ASP 中可以采用的名称。命名空间通过放置在命名空间ClassName="ControlClass"的声明和动态控件现在将有一个引用来ASP.ControlClass进行安全转换,当您使用LoadControl

您可以阅读 MSDN http://msdn.microsoft.com/en-us/library/c0az2h86(v=vs.100).aspx上的完整步骤

当你不使用 ASP。命名空间并离开控件采用自动名称,则案例可能会失败(我不知道为什么,但它有时会在我的服务器上失败)创建的引用是

namespace ASP
{
    [CompilerGlobalScope]
    public class Control_Class_nameByDirectory : ControlClass
    {
        [DebuggerNonUserCode]
        public ControlClass();

        protected override bool SupportAutoEvents { get; }

        [DebuggerNonUserCode]
        protected override void FrameworkInitialize();
    }
}

当你尝试制作一个像它一样的演员时,(ControlClass)LoadControl("~/module/Control.ascs")它可能会失败,因为它是识别它Control_Class_nameByDirectory而不是识别它ControlClass

现在,如果您按照 MSD 的说明在控件标头上声明 ClassName,结果是控件将获得与您定义的 ClassName 相同的 ClassName:

namespace ASP
{
    [CompilerGlobalScope]
    public class ControlClass : global::ControlClass
    {
        [DebuggerNonUserCode]
        public ControlClass();

        protected override bool SupportAutoEvents { get; }

        [DebuggerNonUserCode]
        protected override void FrameworkInitialize();
    }
}

在这里,您可以使用ASP.ControlClass来强制转换控件,如果它失败了。

所以按照这里描述的步骤http://msdn.microsoft.com/en-us/library/c0az2h86(v=vs.100).aspx你可以避免这样的问题。(而且我已经面对他们)

在不参考 ASP 的情况下无法对自定义控件进行大小写的问题。在 Dot net 4.0 和 4.5 版本中都可以看到命名空间。最糟糕的是这是一个随机失败——这意味着有时会发生,有时不会,我无法找到原因。

于 2013-02-06T10:42:05.010 回答
0

我假设您正在寻找服务器控制标签上的前缀......如果不是这样,请告诉我。

前缀在 configuration/system.Web/pages/controls 下的 web.config 文件中注册。您可以根据需要对其进行修改,或者为您自己的控件库注册额外的前缀。

MSDN 信息在这里:http: //msdn.microsoft.com/en-us/library/ms164640.aspx

于 2011-08-10T22:39:14.610 回答
0

此命名空间用于 ASP.NET 通过解析 .aspx 和 .ascx 文件生成的代码。

不过,我不知道你为什么在乎。它只是一个命名空间。它没有什么“特别”的地方,你不应该在那个命名空间中引用任何东西。


要了解所有这些是如何工作的,请阅读“ ASP.NET 生命周期”。

于 2011-08-10T23:24:49.907 回答