当加载相同装配的不同版本时,单身人员应该如何表现?

时间:2012-10-02 07:38:20

标签: c# .net

假设在名为Common的程序集中有一个单例类。我的主应用程序使用此DLL,插件文件夹中的插件DLL可以使用不同的版本。

分布如下:

\App.exe

\Common.dll (v1)

\Plugins\Plugin.dll

\Plugins\Common.dll (v2)

因此,AppPlugin中的代码都在使用该单例类。我面临一个难以追踪的错误,这让我觉得有时候单身类会失去所有属性的值并开始表现得像是一个新的实例。从堆栈跟踪中,当插件DLL访问它时总会发生这种情况。

编辑:我刚发现App正在访问它的一些堆栈跟踪。所以取消上一段的最后一行。

AppPlugin(不同的VS项目)都被编译并链接到添加到各自Common DLL版本的引用。

编辑:Plugin使用主AppDomain中的Assembly.LoadFrom加载。

编辑:Common Plugins文件夹中存在的DLL v2也会使用Plugin DLL动态加载,因为所有DLL都是从该文件夹加载的:

foreach( string extensionFile in Directory.GetFiles( ExtensionsDirectory, "*.dll" ) )

有人可以帮助发生什么事吗?

1 个答案:

答案 0 :(得分:1)

虽然有可能,但Microsoft建议加载同一DLL的两个版本:http://msdn.microsoft.com/en-us/library/dd153782.aspx#avoid_loading_multiple_versions