Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否从自定义服务器控件的OnInit获取ASP.NET程序集?_C#_Asp.net_Assemblies_Custom Server Controls - Fatal编程技术网

C# 是否从自定义服务器控件的OnInit获取ASP.NET程序集?

C# 是否从自定义服务器控件的OnInit获取ASP.NET程序集?,c#,asp.net,assemblies,custom-server-controls,C#,Asp.net,Assemblies,Custom Server Controls,我正在尝试构建一个ASP.NET自定义服务器控件,该控件显示有关ASP.NET项目的版本信息,该ASP.NET项目包含呈现服务器控件的页面 获取ASP.NET项目程序集的C#语法是什么 也就是说,如果在自定义服务器控件的代码中有此OnInit重写 protected override void OnInit(事件参数e){ System.Reflection.Assembly Assembly=Foo(); } 。。。Foo()中有什么内容 编辑:自定义服务器控件在不是ASP.NET项目/程序

我正在尝试构建一个ASP.NET自定义服务器控件,该控件显示有关ASP.NET项目的版本信息,该ASP.NET项目包含呈现服务器控件的页面

获取ASP.NET项目程序集的C#语法是什么

也就是说,如果在自定义服务器控件的代码中有此OnInit重写

protected override void OnInit(事件参数e){
System.Reflection.Assembly Assembly=Foo();
}
。。。Foo()中有什么内容

编辑:自定义服务器控件在不是ASP.NET项目/程序集的类库项目/程序集中定义

 public Assembly GetPageAssembly()
 {
   var pageType = Page.GetType();
   return Assembly.GetAssembly(pageType.BaseType == null 
                                || pageType.BaseType == typeof (Page)
                                     ? pageType : pageType.BaseType);
 }
不管控件的实现在哪里,一个单独的dll还是当前的dll,它最终都会在一个页面类中实例化并添加到它的控件集合中。可以通过Page方法访问此页面,并在此基础上找到程序集。
对于一个.aspx文件(实际上是几个,如果更多的话),ASP.Net会创建一个dll。如果设置了“Inherit”属性,则生成的类将如下所示:

public _Default_aspx : Namespace._Default, IHttpHandler {
}
这个dll与VisualStudio编译的dll不同,后者是“Web应用程序项目”的结果,我想您对最新的dll更感兴趣。此dll具有我们在Visual Studio中看到的“\u Default:类型:

public _Default : System.Web.Page
{
}
那么为什么要写这篇短篇小说呢?当这个.Page.GetType()从服务器控件调用,然后,如果设置了Inherit属性,则该方法将返回_Default_aspx type,但对您没有用处,因为您需要由Visual Studio创建的程序集,而不是由ASP.Net从aspx/ascx文件生成的程序集。如果页面或控件已设置Inherit属性,则GetType()就足够了。

了解类型后,只需调用Assembly.GetAssembly方法即可返回所需的程序集。

我从以前的版本中看到,您已经找到了如何获取程序集版本Calling Assembly。GetExecutionGassembly()为我提供了定义自定义服务器控件的程序集,而不是ASP.NET程序集(这是两个不同的程序集,很抱歉,这是我现在才在问题中提到的一个重要事实)。调用Assembly.GetCallingAssembly()将为我提供.NET System.Web程序集,而不是ASP.NET项目的程序集。