従来の VB6 COM+ コンポーネントを VB.NET コンポーネントにアップグレードしようとしています。私は、IEventListener という 1 つのクラスを持つ EventPackage と呼ばれるものを既にアップグレードしているようです。別の、TradeOrders Implements EventPackage.IEventListener
、. TradeOrders をビルドしようとすると、次のエラー/警告が表示されます。
- 参照 "EventPackage" のタイプ ライブラリを読み込めません。ライブラリが登録されていません。(HRESULT からの例外: 0x8002801D (TYPE_E_LIBNOTREGISTERED))
- 参照されたコンポーネント 'EventPackage' が見つかりませんでした。
- タイプ 'EventPackage.IEventListener' が定義されていません。
.vbproj で、この参照に気付きました
<COMReference Include="EventPackage">
<Guid>{0D76C094-21A6-4E04-802B-6E539F7102D7}</Guid>
<Lcid>0</Lcid>
<VersionMajor>2</VersionMajor>
<VersionMinor>0</VersionMinor>
<WrapperTool>tlbimp</WrapperTool>
</COMReference>
この Guid のレジストリを検索すると、何も見つかりません。同様の COM+ オブジェクトに GUID を使用する場合、それらはHKEY_CLASSES_ROOT\CLSID\{...}\TypeLib
("..." は他のコンポーネントの GUID です) にあります。EventPackage.IEventListener に対応するレジストリ キー名に移動すると、\TypeLib
サブキーがないことがわかります。ご想像のとおり、reg で "0D76C094-21A6-4E04-802B-6E539F7102D7" を検索しても結果は得られません。
これはレジストリの問題に違いないことはわかっていますが、見つけたすべてのグーグルの結果を試してみました。Regasm と regsvcs .exe を試しましたが、役に立ちませんでした。多くのページでは、dll を COM+ マネージャーにドラッグすると、コンポーネントが自動的に登録されるはずだとだけ書かれています。
では、タイプ ライブラリを登録するにはどうすればよいでしょうか。
EventPackage COM+ コンポーネントの作成方法の詳細
- VB6->VB.NETウィザードを実行しました
次に、いくつかの行を assemblyinfo.vb ファイルに追加しました
- 追加した
Imports System.EnterpriseServices
- 追加した
Imports System.EnterpriseServices
Imports System.Data.SqlClient
<Assembly: CLSCompliant(True)>
<Assembly: AssemblyKeyFileAttribute("...")>
強い名前に<Assembly: Guid("...")>
(「...」は古いコンポーネントの COM+ CLSID です)
クラスファイル IEventListener.VB に以下を追加しました
Imports System.EnterpriseServices
<ComClass("...")> _
(... は適切な COM+ CLSID であり、それが唯一の引数です)Inherits ServicedComponent
- 変換ウィザードによって作成された ID を適切な値に変更しました (
<System.Runtime.InteropServices.ProgId("IEventListener_NET.IEventListener)>
から<System.Runtime.InteropServices.ProgId("EventPackage.IEventListener")> _
次に、適切な COM+ アプリケーションの COM+ マネージャーに DLL をドラッグしました (ただし、「パス」は指定されておらず、 とだけ表示されていますmscoree.dll
) 。