gpt4 book ai didi

c# - BuildManager 解析页面继承

转载 作者:行者123 更新时间:2023-11-30 17:24:18 24 4
gpt4 key购买 nike

我编写了一个 VirtualPathProvider 来更改将 aspx 页面加载到我的 ASP.Net 应用程序中的方式。作为这个过程的一部分,我已经删除了代码隐藏文件,我只是断言我的页面继承自一个特定的页面类。例如:

<%@ Page Language="C#" AutoEventWireup="true" Inherits="Namespace.PageClass" %>

如果我这样做,我会得到以下异常:

HttpParseException Could not load type 'Namespace.PageClass'

我也试过以下方法:

<%@ Page Language="C#" AutoEventWireup="true" Inherits="Namespace.PageClass, AssemblyName" %>

这会产生以下错误:

HttpParseException Could not load the assembly 'AssemblyName'. Make sure that it is compiled before accessing the page.

当应用程序启动时,我将所需的程序集加载到当前应用程序域中:

AppDomain.Current.Load(...)

目前我假设问题出在 BuildManager 解析命名空间/程序集引用的能力上......但如果说实话......那只是猜测 :-)

有没有人能阐明这一点?

最佳答案

您的页面必须使用完整的指定类位置 - 即 Inherits="MyNamespace.MyClass, MyAssembly"

然后将程序集加载到 appDomain 中不会帮助 AppDomain 解析它。它不会遍历动态加载的程序集。因此,您必须订阅 AppDomain.ResolveAssembly 事件。

private Assembly myDynamicAssembly = null;

protected void Application_Start( object sender, EventArgs e )
{
myDynamicAssembly = Assembly.LoadFrom( Server.MapPath( "MyLocation/MyAssembly.dll" ) );

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler( CurrentDomain_AssemblyResolve );
}

Assembly CurrentDomain_AssemblyResolve( object sender, ResolveEventArgs args )
{
if ( args.Name == "MyAssembly" )
{
return myDynamicAssembly;
}

return null;
}

你就完成了。现在运行时知道如何从这个动态加载的程序集中解析类。

关于c# - BuildManager 解析页面继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1199237/

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