1

.NET には、関連するオブジェクトを登録する正規のメカニズムがありますか? (つまり、.NET のコンポーネント カテゴリ?)

バックグラウンド

多数の COM オブジェクトがあり、それらはすべて関連しており、すべてが同じインターフェイスを実装しており、これらすべてのオブジェクトを登録する中心的な場所が必要な場合は、Component Categoriesを使用します。

HKCR\Component Categories

関連する COM オブジェクトの束を登録できる場所です。私のソフトウェアがプラグインをサポートしている場合、「カテゴリ」を作成します。

HKCR\Component Categories\{1628B80E-E735-481C-8EDA-FC13D92B5F36}
   409: REG_SZ = "Ian's super-cool application plugins"

次に、自分のプラグインを私のアプリケーションに登録したい人は誰でも、Implemented Categoriesというエントリを作成してカテゴリを実装することに言及する必要があります。

HKCR\{EC05174F-F824-4888-9FDC-EE33080917DE}
   \ProgID
       default = "Stackoverflow.IansSuperCoolApp.1"
   \Implemented Categories
       \{1628B80E-E735-481C-8EDA-FC13D92B5F36}

そして今、私はそれらを見つける場所を知っています。たとえば、Microsoft には数十個の画像変換フィルターがあり、すべてがカテゴリの下に登録されています{C501EDBE-9E70-11D1-9053-00C04FD9189D}

  • DXImageTransform.Microsoft.CrBlinds.1
  • DXImageTransform.Microsoft.Iris.1
  • DXImageTransform.Microsoft.AlphaImageLoader.1
  • DXImageTransform.Microsoft.RadialWipe.1
  • ...

シェル拡張機能、SQL Server 競合リゾルバーもあります。必要なすべてのクラスを見つける方法が必要なときはいつでも。

たった1つの実装

では、関連する COM オブジェクトを登録する正規の場所であることを除けば、特別なことは何もありません。Component Categories誰もがクラスを登録する独自の方法を自由に作成できます。しかし、COM を発明した人たちは、それを行うための「その」場所を作ることにしました。Microsoft は、それを使用するのに役立つ APIも提供しています。

しかし、必要な機能を含むクラスを登録する独自のメカニズムを宣言することを止めるものは何もありません。

  • 私は自分自身を作成することができましたHKCR\Ian's Supercool Application plugins
  • ProgID を宣言する XML ファイルを作成できます

COM オブジェクトをグループに登録する場合は、タスク用に設計された場所を使用してください。

しかし、.NET はどうでしょうか。

数十個の .NET アセンブリ (*.dll) があるとどうなりますか。それらを登録するにはどうすればよいですか?COM コンポーネント カテゴリは実際には使用できません。これらは COM オブジェクトではない (つまり、COM オブジェクトでも COM 呼び出し可能ラッパーでもない) ためです。それらはマネージ アセンブリです。

.NET にアセンブリ カテゴリを登録する正規のメカニズムはありますか?

注:最初の行の後にすべての読み取りを停止できます。残りはただの毛羽立ちです。

4

2 に答える 2

0

私があなたの質問を正しく読んでいれば、.NET は COM オブジェクトとは別の獣であることが意図されているというのが答えです。COM オブジェクトのストレージが、.NET が排除するように設計された DLL 地獄に私たちを導いたものの一部である場合、中央の場所について話しているメカニズム。これは避けるべきものであり、重複するものではありません。

つまり、.NET では、アイテムを Global Assembly Cache に追加できますコードを名前空間にグループ化することを含む、そうするためのガイドライン。Microsoft は、 http://msdn.microsoft.com/en-us/library/vstudio/ms229042( v=vs.100 ).aspx でこれに関するガイダンスを提供しています。これ、コード ライブラリを整理する標準的な方法です。

GACの使用方法を説明する記事から:

絶対に必要な場合にのみ、独自のアセンブリに GAC を使用することをお勧めします。Microsoft は、通常、アセンブリをアプリケーション フォルダー内に保持することをお勧めします。

ただし、多くの場合、グローバル アセンブリ キャッシュを使用せ、アプリケーションと共に .dll ファイルをコピーすることをお勧めします。これにより、.NET 以前の Microsoft プラットフォーム開発者の悩みの種であった DLL 地獄の状況を回避できます。

于 2013-02-11T19:09:49.790 に答える