RainbowMage / OverlayPlugin

Other
133 stars 182 forks source link

アドオン関係でアセンブリの探索に問題があります #19

Closed xtuaok closed 9 years ago

xtuaok commented 9 years ago

OverlayPlugin (0.3.0.0)を下記の構成でインストールすると、アドオンのロード時に再度OverlayPlugin.dllがロードされて、実行中のIOverlayAddonにアサインできない型になってしまいます。

テストケースの構成 C:/local/ACT/Advanced Combat Tracker.exe (ACT実行ファイル) C:/local/ACT/OverlayPlugin/ (OverlayPlugin インストールフォルダ)

おそらくアセンブリの探索規則によるものと考えられます。 参考: https://msdn.microsoft.com/ja-jp/library/15hyw9x3%28v=vs.110%29.aspx

プローブされるディレクトリは、次のとおりです。 [application base] / [assembly name].dll [application base] / [assembly name] / [assembly name].dll

この探索規則により、ACTのexeがあるフォルダ以下のOverlayPlugin/OverlayPlugin.dll が見つかってしまい、カスタムリゾルバが呼び出される前にロードが解決してしまいます。 その結果 GetExecutingAssembly() によるアセンブリが使用されません。

蛇足ですが ACTからOverlayPluginをロード後、OverlayPluginのEnabledを切り替えるとアドオンが読まれないようですがこれはまた別の問題であり、ACTを再起動すればいいことなのでケアする必要性は薄いかも知れません。

RainbowMage commented 9 years ago

ご報告ありがとうございます。

アセンブリの探索規則による問題はIOverlayAddonを別アセンブリに分離してしまうことにより解決できる見込みです。

ACT の再起動を伴わない OverlayPlugin 再読み込み時に、アドオンが再度読み込まれない問題に関しては、静的コンストラクタは一度しか実行できないことが原因でした。IOverlayAddon のインスタンスにアドオンの情報を持たせ、それをプラグイン側で保持することにより、こちらの問題も解決できる見込みです。

RainbowMage commented 9 years ago

問題を修正したコミット 7bd87e471538f5eaf0b34cb4158a39c81c5f797c をプッシュしました。

IOverlayAddon の実装方法に大きな変更が入ってしまいましたが、報告していただいた問題は解決していると思われます。

xtuaok commented 9 years ago

今回のコミットで問題が解消したことを確認しました。 ありがとうございました。

ちなみにですが当方のアドオン(EnmityOverlay)は0.3系がリリースされた後にリリースしようと考えています。