假设在名为Common
的程序集中有一个单例类。我的主应用程序使用此DLL,插件文件夹中的插件DLL可以使用不同的版本。
分布如下:
\App.exe
\Common.dll (v1)
\Plugins\Plugin.dll
\Plugins\Common.dll (v2)
因此,App
和Plugin
中的代码都在使用该单例类。我面临一个难以追踪的错误,这让我觉得有时候单身类会失去所有属性的值并开始表现得像是一个新的实例。从堆栈跟踪中,当插件DLL访问它时总会发生这种情况。
App
和Plugin
(不同的VS项目)都被编译并链接到添加到各自Common
DLL版本的引用。
编辑:Plugin
使用主AppDomain中的Assembly.LoadFrom
加载。
编辑:Common
Plugins文件夹中存在的DLL v2也会使用Plugin
DLL动态加载,因为所有DLL都是从该文件夹加载的:
foreach( string extensionFile in Directory.GetFiles( ExtensionsDirectory, "*.dll" ) )
有人可以帮助发生什么事吗?
答案 0 :(得分:1)
虽然有可能,但Microsoft建议不加载同一DLL的两个版本:http://msdn.microsoft.com/en-us/library/dd153782.aspx#avoid_loading_multiple_versions