2

以前にも同様の質問がありましたが、すべて試してみましたが、うまくいきませんでした。

違いの 1 つは、私の製品がアプリケーションではなくクラス ライブラリであることです。「myapplication.exe.manifest」のようなファイルを「ドロップイン」する方法があれば、おそらくそれを実行できます。しかし、本質的に私たちのライブラリは SDK を使用しており、その SDK には、SDK の使用に伴う必要があるマニフェスト ファイルがあります。

通常、すべての依存関係が適切に確立された状態で、クラス ライブラリをプラグインとして単純にロードする必要があります。しかし、マニフェストはここでは機能していません。

実際のアプリケーションを作成する場合、プロジェクトにマニフェストを追加し、プロジェクトの [プロパティ] ([アプリケーション] セクション) でマニフェストを指定できます。クラス ライブラリの場合、このオプションは無効になっていますが、(利用可能なテンプレートを介して) アプリケーション マニフェストを追加し、必要なコンテンツを貼り付けることができました。VS で DLL を直接表示 (ファイル/開く) し、RT_MANIFEST が定義されていることを確認することで、マニフェストが埋め込まれていることを確認できます。しかし、SDK には初期化中に COMExceptions があります。

これは、使用しているサードパーティ SDK のすべての使用に必要なマニフェストの内容です。

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" 
            xmlns="urn:schemas-microsoft-com:asm.v1" 
            xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" 
            xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <assemblyIdentity version="1.0.0.0" name="VideoOS.UI"/>
    <file name="ImageViewerDotNet.dll">
       <comClass clsid="{b86e5a61-3f0d-4efd-a040-a68a301a1bfa}"/>
    </file>
    <file name="AudioPlayerDotNet.dll">
       <comClass clsid="{31b3afb3-462a-4135-80c4-151649ccd0d5}" />
    </file>
</asmv1:assembly>

明確にするために: VideoOS.UI はアセンブリの名前ではなく、使用している SDK の一部です。そのため、現時点ではマニフェストをアプリケーションに添付することが、SDK を使用できる唯一の方法です。単に .exe.manifest を作成するというアプローチではうまくいきません。

自分のアセンブリとは異なるアセンブリの依存関係を定義しているという事実と関係がありますか?

[注: この特定の SDK/プラグインはアプリケーションの普遍的な機能ではないため、アプリケーションへのマニフェストの適用はうまく機能しません。]

4

0 に答える 0