我编写了一个VirtualPathProvider来改变aspx页面加载到ASP.Net应用程序的方式。作为此过程的一部分,我删除了Code-Behind文件,我只是确定我的页面继承自特定的页面类。 例如:
<%@ Page Language="C#" AutoEventWireup="true" Inherits="Namespace.PageClass" %>
如果我这样做,我会得到以下例外:
HttpParseException无法加载类型 'Namespace.PageClass'
我也尝试了以下内容:
<%@ Page Language="C#" AutoEventWireup="true" Inherits="Namespace.PageClass, AssemblyName" %>
这会产生以下错误:
HttpParseException 无法加载程序集 '的AssemblyName'。确保它是 在访问页面之前编译。
当应用程序启动时,我将所需的Assembly加载到当前的App域中:
AppDomain.Current.Load(...)
目前我假设问题在于BuildManager能够解析命名空间/程序集参考....但如果诚实......这是一个猜测: - )
有人能够对此有所了解吗?
答案 0 :(得分:2)
您的网页必须使用完整的指定班级位置 - 即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;
}
你已经完成了。现在,运行时知道如何从这个动态加载的程序集中解析类。
答案 1 :(得分:0)
可能的原因:
如果您在.aspx页面或Global.asax页面中引用模块后面的任何代码并且Web应用程序尚未构建,则会出现此错误。只需再次构建应用程序,并确保其中一个Web应用程序程序集中可以使用Namespace.PageClass类型。
使用@Assembly指令在编译时将程序集链接到aspx页面。
@ Assembly Name =“assemblyname”Src =“pathname”使所有程序集的类和接口可供使用。
2.出现此类错误的另一个原因可能是IIS中配置的错误版本的ASP.NET。 在IIS中选择正确的ASP.NET版本
转到“开始”菜单,单击“运行”(或使用“Win Key + R”)
键入INetMgr并按Enter键以打开Internet信息服务应用程序
展开显示本地计算机名称的树节点并导航到网站 - &gt;默认网站
右键单击“默认网站”节点,然后选择弹出菜单选项“属性”
5.导航到属性页面中的ASP.NET选项卡并设置正确/最新版本。