3

.NET アセンブリにアクセスする必要があるアプリケーション(Delphi ネイティブ コード)があります(いくつかの COM クラスを公開します。アセンブリとマニフェストを並べて使用してこれを実行したいと考えています。テスト用の .NET アセンブリでこれを実行しましたが、アクセスする必要があるアセンブリに問題があります。

アセンブリが登録されると、COM クラスをインスタンス化できます。アセンブリの登録を解除し、並べてアクセスしようとするとすぐに、上記のエラーが発生します。私のネイティブ アプリケーションにはアプリケーション マニフェストがあり、アセンブリへの単純な依存関係があります。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity type="win32"
                    name="TestApplication.exe"
                    version="1.0.0.0"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        name="TestAssembly"
        version="1.0.0.0"
        processorArchitecture="x86"
        publicKeyToken="xxxxxxxxxxxxxxxx"
        type="win32"/>
    </dependentAssembly>
  </dependency>
</assembly>

.net アセンブリにリソースとして埋め込んだアセンブリ マニフェストは次のとおりです。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    name="TestAssembly"
    version="1.0.0.0"
    processorArchitecture="x86"
    publicKeyToken="xxxxxxxxxxxxxxxx"
    type="win32"/>
  <clrClass
    clsid="{F3F1623D-DB4A-4152-9A5D-5A465AD3A318}"
    progid="TestAssembly.MyObject"
    threadingModel="Both"    
    name="TestAssembly.MyObject"
    runtimeVersion="v2.0.50727">
  </clrClass>
  <file name="TestAssembly.dll">
  </file>
</assembly>     

マニフェストは正しく設定されているようです。アプリケーション マニフェストの依存関係の名前、バージョン、または公開キー トークンを変更すると (例にあるものは私のコードにあるものではありません)、アプリケーションの構成が正しくないという通常の SxS エラーが発生します。

私はこれを別の (確かに単純な) .NET アセンブリで動作させていますが、何が問題なのかわかりません。問題は、エラーの意味がわからないことです。

4

1 に答える 1

4

.Net アセンブリ マニフェストを生成するにはmt.exe、次のように使用します

c:>mt.exe -nologo -managedassemblyname:"your_binary.dll" -nodependency -out:"temp_file.manifest"
c:>mt.exe -nologo -manifest "temp_file.manifest" -outputresource:"your_binary.dll";2

次に、temp_file.manifest を開き、デルファイ実行可能マニフェストのタグのassemblyIdentity下にタグをそのままコピーします。dependency\dependentAssembly

参考までに: 実行可能ファイルと依存するすべての .net dll の両方を同じフォルダーに保存する必要があります。

于 2010-11-03T17:03:46.630 に答える