我的情况是;
我正在设计一个插件应用程序,基于动态加载插件组件,多个用户可以运行托管在服务器计算机上的应用程序。应用程序是从我的Live Update Server上的启动服务器自动更新插件组件。因此,插件文件(及其卫星DLL不应锁定在文件系统上。
byte[] assemblyBytes = File.ReadAllBytes("asm-path");
var assembly = Assembly.Load(assemblyBytes);
预计不会锁定DLL文件。但是,如果我加载的DLL具有静态参考DLL本身怎么办?他们现在被锁定在文件系统上。
要命名文件,可以说;
- app.exe是我的基本应用程序;
- pl1.dll是我的第一个插件,app.exe将其加载到新的应用程序中
- pl2.dll是我的第二个插件,app.exe将其加载到新的appdomain 中
- pl1_s.dll是PL1.dll插件的静态参考DLL,加载在PL1 AppDomain 中
- pl_common是PL1和PL1和PL2 AppDomains 的PL1和PL2插件的静态参考DLL
pl1_s和pl_common也不应锁定在诸如PL1和PL2组件之类的文件中
关于如何解决的任何想法?
如asp.net。请参阅影子复制组件:
影子复制使在应用程序域中使用的程序集更新而无需卸载应用程序域。这对于必须连续可用的应用程序(例如ASP.NET站点)特别有用。
因此,在创建AppDomain
S
AppDomainSetup.ShadowCopyFiles
打开它