C# 共享库的插件程序集
我的应用程序包括一个插件体系结构,在该体系结构中,放置在已知目录子目录中的符合特定条件的DLL将根据需要加载到应用程序中 插件程序集并不总是自包含的。有时需要一些库DLL。它们放置在每个插件部件旁边。它们不符合插件标准,因此它们不会作为插件加载,而是通过插件加载 有时,多个插件使用同一库的完全相同版本。然后,在多个插件目录中存在关联DLL的副本 在有人决定不需要某个插件并删除其子目录之前,这一切都可以正常工作。应用程序检测到这一点很好,因此不再尝试使用该插件。但是,如果该插件有一个库DLL的副本,而另一个插件也在使用该库DLL,则可能会遇到异常 我相信这是因为.Net每次运行应用程序时只会加载该库的特定版本一次。它从中加载的特定文件就是恰好最先使用的插件旁边的文件。如果该插件恰好是已删除的插件,那么使用同一库的任何其他插件都将崩溃,因为它们试图使用现在已删除的DLL 使用Assembly.LoadFrom(路径)加载插件程序集。我认为我不能使用LoadFile(path),因为它不能处理对其他DLL的引用。我不能使用Load(typename),因为我拥有的是路径,而不是类型名 重新启动应用程序可以解决问题,但目前仅在出现故障后“手动”进行 是否有人有以下建议:-C# 共享库的插件程序集,c#,.net,C#,.net,我的应用程序包括一个插件体系结构,在该体系结构中,放置在已知目录子目录中的符合特定条件的DLL将根据需要加载到应用程序中 插件程序集并不总是自包含的。有时需要一些库DLL。它们放置在每个插件部件旁边。它们不符合插件标准,因此它们不会作为插件加载,而是通过插件加载 有时,多个插件使用同一库的完全相同版本。然后,在多个插件目录中存在关联DLL的副本 在有人决定不需要某个插件并删除其子目录之前,这一切都可以正常工作。应用程序检测到这一点很好,因此不再尝试使用该插件。但是,如果该插件有一个库DLL的副本
- 从问题中恢复,例如,通过说服.Net更改查找该DLL的位置
- 说服包含插件的Web应用程序在这种情况下自动重新启动
- 重新构建以避免问题(但这是一个成熟的在用应用程序,因此我的选项有限)
<CommonReferences>
<Dll id="" path="" version=""/>
<Dll id="" path="" version=""/>
</CommonReferences>
<Plugins>
<Plugin id="" path="" version="">
<Dependencies>
<DependencyDll id="" path="" version=""/>
<DependencyDll id="" path="" version=""/>
<DependencyDll id="" path="" version=""/>
</Dependencies>
</Plugin>
</Plugins>
查看MEF文档-作为这一特定事物的框架,他们可能有解决方案。