FireBreath Framework を使用してブラウザ プラグインを作成しています。ほとんどのロジックは C# で記述されており、ブラウザから呼び出すために C++ ラッパーを作成しました。ブラウザーは、C# プロジェクトで実際のロジックを呼び出す「プロキシ」マネージ C++ コードを呼び出す C++ ネイティブ コードを呼び出します。
だから私は3つのdllを持っています:
- Managed C++ に依存する head ネイティブ C++ dll。
- C# に依存するマネージ C++。
- メイン ロジックを含む C# dll。
ユーザー ディレクトリにインストールされた 3 つの dll すべて (c:\Users\\AppData\Roaming\MyCompany\MyApp\1.0.0.0)
問題は、ブラウザーが C# dll をロードしないことです。Side by Side マニフェストを使用して依存関係を宣言します。
アセンブリを宣言する別のマニフェスト ファイルを作成しようとしました。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="MyAssembly" processorArchitecture="*" type="win32" version="1.0.0.0"/>
<file name="FirstDependency.dll"/>
<file name="SecondDependency.dll"/>
</assembly>
この依存関係へのリンクをヘッド dll (ネイティブ C++) に追加しました。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity name="MyAssembly" processorArchitecture="*" type="win32" version="1.0.0.0"/>
</dependentAssembly>
</dependency>
</assembly>
また、ヘッド dll (ネイティブ C++) で直接依存関係を宣言しようとしました。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<file name="FirstDependency.dll"/>
<file name="SecondDependency.dll"/>
</assembly>
#pragma ディレクティブを使用して依存 dll をリンクしようとしました:
#pragma comment(linker, "\"/manifestdependency:type='win32' name='FirstDependency' version='1.0.0.0' processorArchitecture='X86' language='*'\"")
#pragma comment(linker, "\"/manifestdependency:type='win32' name='SecondDependency' version='1.0.0.0' processorArchitecture='X86' language='*'\"")
Dependency Walker を使用して依存関係を確認したところ、Managed C++ と C# の間に存在しない依存関係が確認されました。
プラグインは head dll (ネイティブ C++) にアクセスでき、Managed C++ もロードしますが、Managed C++ が C# dll を呼び出すと、プラグインが失敗し、C# アセンブリが見つかりません。
C# dll をブラウザ アプリケーション (firefox.exe または chrome.exe) と同じディレクトリに配置すると、動作します。
Managed C++ と C# の間で Side By Side 依存関係が機能しないようです。
プラグインに依存する dll をロードするにはどうすればよいですか?