3

COM登録なしでDelphiアプリで使用されるC#COMサーバーを作成しようとしています。

プロセスはmsブログで説明されています-.NETベースのコンポーネントの登録なしのアクティベーション:ウォークスルー

必然的にマニフェストファイルを作成し、それらをアセンブリにリンクしました。

アプリマニフェスト:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    type="win32"
    name="Vorg"
    version="1.0.0.0" />
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="x86"/>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
                <assemblyIdentity
                            type="win32"
                            name="Vorg.WpfClient"
                            version="1.0.0.0" />
    </dependentAssembly>
  </dependency>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
        </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

およびアセンブリマニフェスト:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity type="win32" name="Vorg.WpfClient" version="1.0.0.0" />
    <clrClass
        clsid="{69A72676-8EA7-3C38-BFBC-F0DFE745C329}"
        progid="Vorg.WpfClient"
        threadingModel="Both"
        name="KundM.Vorg.WpfClient.VorgComClient">
    </clrClass>
</assembly>

それらはうまく機能しています(私は思います)。sxsはエラーを報告しません。clsidはcomクラスに対しても正しいです。ただし、アプリを起動すると、ole例外0x8013101bによってクラッシュします。

マニフェストを削除し、クラスnotfound例外でcurseのアプリ結果を実行します。com-classを登録すると、アプリはエラーなしで正常に起動します。

例外は、「間違ったフレームワークバージョン」のようなものかもしれません。

クラスマニフェストでランタイムを指定しようとしました。しかし、それは問題を解決しませんでした。

例外の原因は何ですか?

どうすればその問題を解決できますか?

4

1 に答える 1

3

解決しました。

プログラムFuslogvw.exeは私に正しい方向性を与えました。このツールは、アセンブリのロードプロセスを示します。

これを有効にするには、regキーを作成する必要があります。

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion dword ForceLog = 1

レポートはそこで生成され、これを示しました(申し訳ありませんがドイツのフレームワーク):

LOG: DisplayName = vorg.wpfclient, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
===
LOG: Diese Bindung startet im default-Load-Kontext.
LOG: Der Assembly-Download wurde durchgeführt. Datei-Setup wird begonnen: E:\work\VOrg\bin\vorg.wpfclient.dll.
LOG: Die von der Quelle ausgeführte Setup-Phase beginnt.
LOG: Der Assemblyname ist: Vorg.WpfClient, Version=1.0.0.0, Culture=neutral, PublicKeyToken=174d633867192b66.
WRN: Der Vergleich des Assemblynamens führte zum Konflikt: PUBLIC KEY TOKEN.
ERR: Der Assemblyverweis entsprach nicht der gefundenen Assemblydefinition.
ERR: Das Setup der Assembly konnte nicht abgeschlossen werden (hr = 0x80131040). Die Suche wurde beendet.

マニフェストで公開鍵トークンを指定しませんでした。今私がやります!マイクロソフトからのマニフェストのスキーマファイルが間違っています!バージョンとその他の属性がオプションとして表示されます。

また、comマニフェスト内でランタイムを指定しました。app.configファイルでフレームワークのバージョンを指定することもできます。

于 2012-05-09T13:07:19.377 に答える