我的情况是;
我正在设计一个插件应用程序,基于动态加载插件程序集,多个用户可以运行托管在服务器计算机上的应用程序。应用程序在启动时从我的实时更新服务器自动更新插件程序集。所以插件文件(及其附属 dll 不应该被锁定在文件系统上。
byte[] assemblyBytes = File.ReadAllBytes("asm-path");
var assembly = Assembly.Load(assemblyBytes);
正如预期的那样,没有锁定 dll 文件。但是如果我加载的 dll 本身有静态引用 dll 怎么办?他们现在被锁定在文件系统上。
命名文件,让我们说;
- APP.Exe 是我的基础应用程序;
- PL1.dll 是我的第一个插件,APP.exe 将其加载到新的 Appdomain 中
- PL2.dll 是我的第二个插件,APP.exe 将其加载到新的 Appdomain 中
- PL1_S.dll 是 PL1.dll 插件的静态引用 dll,在 PL1 AppDomain 中加载
- PL_COMMON 是 PL1 和 PL2 插件的静态引用 dll,由 PL1 和 PL2 AppDomains 加载
PL1_S 和 PL_COMMON 也不应该像 PL1 和 PL2 程序集一样锁定在文件中
关于如何解决这个问题的任何想法?