我正在尝试创建一个 ASP.Net Web 应用程序,它将其“内容”(ASPX/ASCX 和程序集)存储在文件系统以外的某个地方(例如,在服务内部),并根据需要动态加载它们。
我已经成功创建了一个 VirtualPathProvider,它负责从备用位置读取 ASPX/Master/ASCX 文件,但是当这些 ASPX 页面继承一个类时我遇到了问题 - 即:当它们有代码时。
感谢另一个问题的答案,我现在能够在运行时成功地将程序集加载到应用程序中。但是当我的运行时尝试编译我的页面时,我收到以下错误:
“编译器错误消息:CS0400:在全局命名空间中找不到类型或命名空间名称‘Web’(您是否缺少程序集引用?)”
[System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()] 公共类 default_aspx : global::Web.Code.CodeBehind, System.Web.SessionState.IRequiresSessionState, System.Web.IHttpHandler
我已将我的代码归结为一个简单的错误示例,以便您轻松查看。您可以在此处下载此代码。
程序集在运行时使用 AppDomain.AssemblyResolve 事件动态加载。这是在 global.asax 中,看起来像这样:
protected void Application_Start(object sender, EventArgs e)
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(Assembly_Resolve);
}
Assembly Assembly_Resolve(object sender, ResolveEventArgs args)
{
Assembly assembly = AppDomain.CurrentDomain.Load(Resources.Web_Code);
if (args.Name == assembly.FullName)
{
return assembly;
}
return null;
}
有任何想法吗?
编辑 如果出于任何原因您需要更新 Web.Code 程序集 - 您需要将其复制到 Web 项目的“ReferencedAssemblies”文件夹中以使这些更改生效。