这个问题真的让我很烦。以下是要解决的问题:
我的目标是在运行时加载包含嵌入式aspx、ascx等的程序集。我还希望不锁定磁盘上的程序集文件,这样我就可以在运行时更新它而无需重新启动应用程序(我知道这将保留先前版本的程序集)。
为此,我编写了一个虚拟路径提供程序来完成这项任务。我已经订阅了CurrentDomain.AssemblyResolve事件,以便将框架重定向到我的程序集。
问题在于,当框架尝试为aspx页面编译动态程序集时,我会收到以下错误消息:
编译器错误消息:CS0400:全局命名空间中找不到“Pages”类型或命名空间名称(是否缺少程序集引用?)
源代码错误: public class app_resource_pages__version_1_0_0_0__culture_neutral__publickeytoken_null_default_aspx:global :: Pages._Default,System.Web.SessionState.IRequiresSessionState,System.Web.IHttpHandle 我注意到,如果我使用Assembly.Load(AssemblyName)或Assembly.LoadFrom(filename)加载程序集,则不会出现上述错误。如果我使用Assembly.Load(byte[])(以便不锁定它),则会抛出异常,但是我的AssemblyResolve处理程序在被调用时正确返回程序集(它被调用一次)。
因此,我猜测它在框架解析asp标记时调用一次,但在尝试为aspx页面创建动态程序集时不会调用。
我的目标是在运行时加载包含嵌入式aspx、ascx等的程序集。我还希望不锁定磁盘上的程序集文件,这样我就可以在运行时更新它而无需重新启动应用程序(我知道这将保留先前版本的程序集)。
为此,我编写了一个虚拟路径提供程序来完成这项任务。我已经订阅了CurrentDomain.AssemblyResolve事件,以便将框架重定向到我的程序集。
问题在于,当框架尝试为aspx页面编译动态程序集时,我会收到以下错误消息:
编译器错误消息:CS0400:全局命名空间中找不到“Pages”类型或命名空间名称(是否缺少程序集引用?)
源代码错误: public class app_resource_pages__version_1_0_0_0__culture_neutral__publickeytoken_null_default_aspx:global :: Pages._Default,System.Web.SessionState.IRequiresSessionState,System.Web.IHttpHandle 我注意到,如果我使用Assembly.Load(AssemblyName)或Assembly.LoadFrom(filename)加载程序集,则不会出现上述错误。如果我使用Assembly.Load(byte[])(以便不锁定它),则会抛出异常,但是我的AssemblyResolve处理程序在被调用时正确返回程序集(它被调用一次)。
因此,我猜测它在框架解析asp标记时调用一次,但在尝试为aspx页面创建动态程序集时不会调用。