2

COM アセンブリを登録しようとしています。私はその(むしろ役に立たないエラー)を述べ続けています

次のエラーが原因で、CLSID {GuidID} を持つコンポーネントの COM クラス ファクトリを取得できませんでした: 80040154 クラスが登録されていません (HRESULT からの例外: 0x80040154 (REGDB_E_CLASSNOTREG))。

このアセンブリは、.NET 4.5 で記述されたライブラリへの参照の一部です。そのライブラリは、.NET 4.5 Web サービスのリファレンスです。アセンブリは Interop.AssemblyName です。Interop.AssemblyName.dll が Web サービスの bin フォルダーに存在することを確認しました。これらのプロジェクトは、VS2012 を使用して .NET 2.0 からアップグレードされたばかりです。

アセンブリを REGSVR32.exe (失敗、DLLEntryPoint なし)、gacutil.exe (正しくインストールされたと言います)、および Regasm (32 ビットと 64 ビット、どちらもインストールが成功したと言います) に登録しようとしました 最後に、変更を試みましたビルド出力は「任意の CPU」から「x86」になります。

上記のいずれも、このエラーを解決するために何もしていません。このばかげたアセンブリは、機能することを決定する前に、他に何を登録したいと思うでしょうか?

4

1 に答える 1

0

ネイティブ COM コンポーネントと、そのために生成された相互運用ライブラリを混同しています。欠けているのは、ネイティブ COM コンポーネントである相互運用ライブラリが、それを適切に登録する上で何の役割も果たさないことです。相互運用ライブラリは、CLR がコンポーネントを簡単に使用できるようにするためだけに存在します。Regsvr32.exe が不平を言う理由は、登録されるべきではありません。

そのネイティブ コンポーネントはまだ見つかっていないようです。見つけるお手伝いもできません。プロジェクト ファイル内の<COMReference>エントリは、それを見つけるためのヒントになります。Guid 要素は、Regedit.exe でレジストリのどこを探すべきかを示します。ただし、このランタイム エラーを解消するには、マシンにインストールする必要があります。インストール手順については、コンポーネントの所有者またはベンダーにお問い合わせください。

また、Web サービスは通常 64 ビット モードで実行されることに注意してください。レガシ COM コンポーネントは、ほとんど常に 32 ビットのみです。互換性を維持するには、サーバーに 32 ビットのアプリケーション プールが必要です。

于 2013-10-17T16:14:22.940 に答える