我编写了一个VirtualPathProvider来改变ASP.Net应用程序加载aspx页面的方式。作为这个过程的一部分,我已经删除了代码隐藏文件,我只是简单地证明我的页面继承自特定的页面类。例:
<%@ Page Language="C#" AutoEventWireup="true" Inherits="Namespace.PageClass" %>如果我这样做,我会得到以下例外:
HttpParseException无法加载“Namespace.PageClass”类型
我还尝试了以下几点:
<%@ Page Language="C#" AutoEventWireup="true" Inherits="Namespace.PageClass, AssemblyName" %>这会产生以下错误:
HttpParseException无法加载程序集“AssemblyName”。在访问该页之前,请确保它已被编译。
当应用程序启动时,我将所需的程序集加载到当前的App域中:
AppDomain.Current.Load(...)目前,我假设问题在于BuildManager解决名称空间/程序集引用的能力.但如果诚实的话。那是猜测:-)
有人能弄清楚这件事吗?
发布于 2009-07-29 17:08:03
您的页面必须使用完整的指定类位置-即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;
}你就完蛋了。现在运行库知道了如何从这个动态加载的程序集解析类。
发布于 2009-07-29 12:27:21
可能的原因:
使用@Assembly指令在编译时将程序集链接到aspx页面。
@ Assembly Name="assemblyname“”Src=“路径名使程序集的所有类和接口都可供使用。
2.造成此错误的另一个原因可能是IIS中配置的ASP.NET版本错误。在IIS中选择正确版本的ASP.NET
单击
5.导航到属性页中的ASP.NET选项卡,并设置正确的/最新版本.
https://stackoverflow.com/questions/1199237
复制相似问题