0

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

分布如下所示:

\App.exe

\Common.dll (v1)

\Plugins\Plugin.dll

\Plugins\Common.dll (v2)

因此,两者中的代码都AppPlugin使用该单例类。我面临一个难以追踪的错误,这让我认为有时单例类会丢失其所有属性值并开始表现得像一个新实例。从堆栈跟踪来看,这总是在插件 DLL 访问它时发生。

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

App和(不同的 VS 项目)都Plugin通过添加到各自CommonDLL 版本的引用进行编译和链接。

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

编辑:Common插件文件夹中的 DLL v2 也与PluginDLL 一起动态加载,因为所有 DLL 都是从该文件夹加载的:

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

任何人都可以帮助发生什么事吗?

4

1 回答 1

1

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

于 2012-10-02T09:28:19.123 回答