0

カスタム .Net コンポーネントを更新しましたが、最初に以前のバージョンを登録解除するのを忘れていました。

登録を解除する代わりに、古いバージョンに新しい dll をコピーしました。

コンポーネントが COM に公開されているため、従来の ASP ページで「オブジェクトを作成できません」というメッセージが表示されます。

古いコンポーネントの情報がレジストリのどこかに残っているか、システムのどこかに残っていると思います。実際のdllを持たずにこれらの情報を削除/アンインストール/登録解除する方法はありますか?

Regasm ツールを使用してコンポーネントの登録を解除しようとしましたが、古い dll が上書きされるため、新しい dll へのパスしか提供できません。

システムから古いバージョン情報を削除し、新しい dll のみを登録する他の方法はありますか?

ありがとう!

4

1 に答える 1

1

アセンブリを登録解除するのを忘れると、レジストリにジャンクが残るだけです。これはずさんで、取り除くのが非常に難しいですが、確かに世界の終わりではありません. 多くの古いマシンには、このようなジャンクがたくさんあります。これは、レジストリ クリーナーが取り除くと公言している種類のジャンクです。これは、そのようなツールを推奨するものではありません。

更新されたアセンブリが正しく機能することを妨げるものではありません。正しく実行し、Regasm.exe を正しく実行したと仮定すると、/codebase オプションを使用して、GAC に煩わされず、ASP プロジェクトのタイプ ライブラリ リファレンスも更新する必要がありません。後者は見落とされがちな典型的なステップであり、古い登録キーをまだ使用している可能性があります。

対応策は、インターフェイスとクラスの宣言で [Guid] 属性を (一時的に) 使用することです。コンポーネントの登録に使用されるレジストリ キーが常に同じになるようにします。このようにレジストリにジャンクを追加することはできません。更新によって常に同じキーが上書きされます。インターフェイスやクラスを追加していないか、DLL のパスを変更していないと仮定すると、更新時に登録手順をスキップすることもできます。

ただし、プロジェクトが安定して出荷する前に、これらの [Guid] 属性を再度削除する必要があります。そうしないと、DLL Hell が呼び出されます。何もいじることはありません。

Regasm.exe /regfile オプションは注目に値します。どの登録キーが使用されているかを確認できます。

于 2013-06-05T12:15:12.380 に答える