問題タブ [assemblyresolve]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - あるマシンでは .net アセンブリ解決ハンドラが失敗するが、別のマシンでは成功する
.net が 2 つの異なるマシンでアセンブリを解決する方法の違いに気付きました。あるマシンでは行ごとに実行され、別のマシンではメソッドごとに実行されているようです。
に次のものがあるとしましょうTest.dll
:
良いマシンで何が起こるか:
を解決するDep.dll
必要があるため、 に入り、ロジックCurrentDomain_AssemblyResolve
内で処理されるものとしてローカルに解決します。if
悪いマシンで何が起こるか:
解決するDep.dll
必要があるため、解決メソッドに入る前に、別のアセンブリ (同じDep.dll
) に存在するメソッドへの呼び出しがあることに気付き、最終的にはStackOverflowException
なぜそれが起こるのか誰か説明できますか?
(コードは .net 4.5 で実行されます)
c# - 型が属性として使用されている場合、アセンブリが解決されないのはなぜですか?
私のソリューションでは、 UITypeEditorを実装する MyAttribute1など、内部に型を持つプロジェクト ('PRJ1' としましょう) があります。
別のプロジェクトでは、PRJ1 を参照し、MyAttribute1 をプロパティの属性として使用します。
問題は、ソリューションをビルドするときに、prj1.dll が最終的なソリューション ディレクトリにコピーされないことです。これにより、CurrentDomain_AssemblyResolve が起動されます。タイプMyAttribut1eのローカル フィールドを作成すると、すべて問題ありません。
何が問題ですか?ここで何が欠けていますか?
c# - c# Assembly.LoadFrom と動的 AssemblyResolve
私はプラグインを動的にロードすることにちょっとこだわっています:
理論: (プラグイン) 特定のフォルダー内の DLL:
ここまでは順調ですね。現在、これらのアセンブリに追加の参照に関する問題があります。これは、catch(ReflectionTypeLoadException)
(すべての null 型を削除する) およびAppDomain.CurrentDomain.AssemblyResolve += ...
(欠落している dll を手動で探す) によって解決できます。
問題は次のとおりです。参照されている不足しているアセンブリは、実装されているプラグインごとに固有であるため、プラグインごとに個別の検索動作を実装する必要があります。これまでの私のアイデア/解決策:
- メイン アプリケーションに考えられるすべての DLL ディレクトリのグローバル リストがある -> メイン アプリケーション コードを変更せずにさらにプラグインを追加できないため、愚かです
- 各プラグインに特定の dll パスの (非静的) 辞書を持つ ->
myPluginBaseClass
仮想/抽象を使用することで強制できます。ただし、インスタンスの作成前 (それらが起動される場所) にはアクセスできないAssemblyResolveEvents
ため、役に立ちません - 各プラグインに特定の dll パスの (静的) 辞書がある -> リフレクションを使用してインスタンス化の前に読み取ることができますが
myPluginBaseClass
、定義済みのテンプレートとしてこれを追加できないため、エラーが発生する可能性があります - プラグインごとに個別のドメインを作成し、それらに独自のドメインを処理させます
AssemblyResolveEvent
->しかし、どのように?
あなたが助けてくれることを願っています!
前もって感謝します!ロビン