BuildManager解析页面inheritance

我编写了一个VirtualPathProvider来改变aspx页面加载到ASP.Net应用程序的方式。 作为此过程的一部分,我删除了Code-Behind文件,我只是确定我的页面inheritance自特定的页面类。 例如:

 

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

HttpParseException无法加载类型’Namespace.PageClass’

我也尝试过以下方法:

  

这会产生以下错误:

HttpParseException无法加载程序集“AssemblyName”。 确保在访问页面之前编译它。

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

 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; } 

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

可能的原因:

  1. 如果您在.aspx页面或Global.asax页面中引用模块后面的任何代码并且Web应用程序尚未构建,则会出现此错误。 只需再次构建应用程序,并确保Namespace.PageClass类型在其中一个Web应用程序程序集中可用。

    使用@Assembly指令在编译时将程序集链接到aspx页面。

    @ Assembly Name =“assemblyname”Src =“pathname”使所有程序集的类和接口可供使用。

2.出现此类错误的另一个原因可能是IIS中配置的错误版本的ASP.NET。 在IIS中选择正确的ASP.NET版本

  1. 转到“开始”菜单,单击“运行”(或者使用Win Key + R)

  2. 键入INetMgr并按Enter键以打开Internet Information Services应用程序

  3. 展开显示本地计算机名称的树节点,然后导航到“网站” – >“默认网站”

  4. 右键单击“默认网站”节点,然后选择弹出菜单选项“属性”

    5.导航到属性页面中的ASP.NET选项卡并设置正确/最新版本。