我们正在开发一个基于 Web 的应用程序,允许管理员上传插件。所有插件都存储在应用根目录之外的特殊文件夹中(例如 C:\Plugins),并通过 Assembly.LoadFrom() 动态加载。这在大多数情况下都可以正常工作:插件中的 WebControls 被实例化和加载,自定义类按预期运行,等等。
我们使用自定义 VirtualPathProvider 从这些插件中获取资源。因此,要获得嵌入式 ASPX 文件,您只需执行“/MySite/embeddedResource/?Assembly=MyPlugin&Resource=MyPage.aspx”。这也很好用:嵌入的 ASPX 文件可以像普通页面一样编译和提供。
但是,当嵌入的 .aspx 文件(在动态加载的插件内部)引用同一插件程序集中的类时,就会出现问题。我们会收到诸如“找不到类型或程序集 MyPlugin”之类的编译错误。这很奇怪,因为很明显,它将 .aspx 文件从 MyPlugin 中拉出。那怎么找不到呢?
所以,我希望你能帮我解决这个问题。该插件看起来像这样:
MyPlugin.dll:
- InternalHelperClass.cs
- MyPage.aspx(没有 .cs 文件的资源)
当 MyPage.aspx 包含类似“<%= InternalHelperClass.WriteHelloWorld() %>”的内容时,编译失败。
我们怎样才能让它发挥作用?
更新:
我们已经尝试使用完全限定名称。没有不同。无法单步执行 - 当您转到 aspx 页面时,这是一个编译错误。在这种情况下,命名空间不会成为问题(因为它来自外部插件 dll)
更新2:
乔尔,我认为你在做某事。不幸的是,编辑 web.config 以包含这些程序集并不是设计的一部分。基本上,我们希望插件是完全动态的——将它们放在一个文件夹中,重新启动应用程序,然后就可以使用了。