0

という名前のアセンブリにシングルトン クラスがあるとしCommonます。この DLL はメイン アプリケーションで使用され、別のバージョンはプラグイン フォルダー内のプラグイン DLL で使用できます。

分布は次のようになります。

\App.exe

\Common.dll (v1)

\Plugins\Plugin.dll

\Plugins\Common.dll (v2)

したがって、両方Appでコーディングし、Pluginそのシングルトン クラスを使用しています。追跡が困難なエラーに直面しているため、そのシングルトン クラスがすべてのプロパティの値を失い、新しいインスタンスのように動作し始めることがあります。スタック トレースから、これはプラグイン DLL によってアクセスされているときに常に発生します。

編集: App によってアクセスされているスタック トレースを見つけました。したがって、上記の段落の最後の行をキャンセルします。

Appと(異なる VS プロジェクト) の両方Pluginがコンパイルされ、それぞれのCommonDLL バージョンに追加された参照でリンクされます。

編集:メインの AppDomain でPlugin使用してロードされます。Assembly.LoadFrom

編集: CommonPlugins フォルダーにある DLL v2 もPlugin、すべての DLL がそのフォルダーから読み込まれるため、DLLと共に動的に読み込まれます。

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

誰が何が起こっているのか助けてくれますか?

4

1 に答える 1

1

可能ですが、Microsoftは同じ DLL の 2 つのバージョンをロードしないことをお勧めします: http://msdn.microsoft.com/en-us/library/dd153782.aspx#avoid_loading_multiple_versions

于 2012-10-02T09:28:19.123 に答える