私は現在、登録不要の COM を採用したネイティブ/マネージド アプリケーション チェーンの開発に取り組んでいます。次の図はこれを示しています。
C# ラッパー DLL は、tlbimp.exe ユーティリティを使用して作成されています。これにより、各 C# 実行可能ファイルが COM DLL のネイティブの型とメソッドにアクセスできるようになります。COM DLL 自体は、サーバー ベースの RegFree COM マニフェストを採用しています。
クライアント ベースの RegFree COM マニフェストが C# 実行可能ファイルに埋め込まれている場合、すべてが正常に機能します。ただし、これらのマニフェスト ファイルを C# DLL に移動して統合したいと考えています。これにより、バージョン情報の保守と同期が大幅に容易になります。
Visual Studio にはマニフェスト ファイルを C# クラス ライブラリに埋め込むオプションが用意されていないため、マニフェスト ツール (mt.exe) を使用して、DLL の既定のマニフェストを抽出、変更、および再埋め込みしようとしました。mt でクエリを実行すると、C# DLL が次のマニフェストを公開するようになったため、これはうまくいったようです。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><assemblyIdentity name="FirstClient" version="1.0.0.0" processorArchitecture="msil"></assemblyIdentity><file name="FirstClient.dll" hashalg="SHA1"></file>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="atl" version="1.0.0.0"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
ただし、実行可能ファイルは動作を拒否し、COM クラス ファクトリが欠落している COM モジュールを見つけることができないと不平を言っています。
ここで見落としているものはありますか?ありがとう。