2012-05-08 21 views
2

COM登録なしでDelphiアプリケーションで使用されるC#COMサーバーを作成しようとしています。SideBySide登録無料COMの読み込み中にエラーが発生する

プロセスが、私は必ずしもマニフェストファイルを作成し、私はアセンブリにそれらをリンクしms blog - Registration-Free Activation of .NET-Based Components: A Walkthrough

にdescriedされます。

アプリケーションマニフェスト:

<?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-classに適しています。 しかし、アプリケーションを起動するとき、それはOLE例外0x8013101bによってクラッシュしています。

クラスが見つかりませんでした例外でマニフェストを削除し、アプリの結果を実行しています。アプリを登録したcom-classを持っている はエラーなしで正常に開始します。

「例外はフレームワークのバージョンが間違っています。

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

何が例外を引き起こしますか?

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

+2

のようなものだろう[本](http://blogs.msdn.com/b/shitals/archive/2012/04/23/10297002.aspx) 。 –

+0

はい、私は同じ考えを持っていました。それが私がランタイムバージョンを設定しようとした理由です。デルファイは.netを使用していません。 .net comプロキシだけがそれを引き起こすかもしれません。 –

答えて

3

解決済み。

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

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

HKEY_LOCAL_MACHINE \ソフトウェア\マイクロソフト\フュージョン 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. 

をマニフェスト今私がやります! Microsoftからのマニフェストのためのschemafileが間違っています!バージョンとその他の属性をオプションとして表示します。

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

関連する問題