名前空間またはアセンブリ?


83

名前空間とアセンブリの間で非常に混乱しています。あるSystem.DataSystem.Web名前空間やアセンブリ?

これらは名前空間と呼ばれ、同時にGAC_32フォルダーに存在することに気づきました。それで、彼らは正確には何ですか?


1
stackoverflow.com/questions/668161/…を参照してください。少し役立つかもしれません。
pswg 2014

回答:


102

System.Data名前空間System.Data.DLL(ファイル)はアセンブリです。

名前空間は、タイプの論理グループです(主に名前の衝突を回避するため)。アセンブリには複数の名前空間の型を含めることができ(System.DLLいくつかの...を含む)、単一の名前空間をアセンブリ全体に分散させることができます(例System.Threading)。


2
どの名前空間をどのアセンブリに含めるかをどのように指定しますか?
Ehsan Sajjad 2016

@ EhsanSajjad2つの間に直接の関係はありません。アセンブリは、(通常はプロジェクトを介して)コードファイルから構築されます。各ファイルには、名前空間にあるクラスが含まれています。したがって、プロジェクト内のファイルを選択することにより、間接的に決定します。それでも問題が解決しない場合は、遠慮なく新しい質問をしてください。
Dスタンレー

それは理にかなっている。ありがとう!
Ehsan Sajjad 2016

@EhsanSajjad、namespaceアセンブリを作成するためにコンパイルされたソースコードでC#ステートメント(または別の.NET言語の同等のもの)を使用します。2番目のアセンブリが名前空間を再度開いてクラスを追加する可能性があることに注意してください。
コンクリートカツオドリ2018年

59

名前空間は、同じ機能に属するクラスの論理グループです。つまりSystem.WebSystem.Data名前空間です

MSDNはそれを次のように説明しています。

名前空間は、C#プログラミングで2つの方法で頻繁に使用されます。まず、.NET Frameworkは名前空間を使用して多くのクラスを編成します。次に、独自の名前空間を宣言すると、大規模なプログラミングプロジェクトでクラス名とメソッド名のスコープを制御するのに役立ちます。

名前空間

アセンブリは、.NETランタイム環境で実行できる(プリコンパイルされた)コードのチャンクです。1つまたは複数の名前空間が含まれています。.NETプログラムは、1つ以上のアセンブリで構成されます。

System.Web.dllSystem.Data.dllはアセンブリです。

MSDNはそれを次のように説明しています。

アセンブリは、.NETFrameworkアプリケーションの構成要素です。これらは、展開、バージョン管理、再利用、アクティベーションスコープ、およびセキュリティ権限の基本単位を形成します。アセンブリは、連携して機能の論理ユニットを形成するように構築されたタイプとリソースのコレクションです。アセンブリは、共通言語ランタイムに、型の実装を認識するために必要な情報を提供します。ランタイムにとって、型はアセンブリのコンテキスト外には存在しません。

アセンブリ


二通り?2番目はどこですか?:)
Jugal Thakkar 2014

1
@JugalThakkarもそれを追加しました。詳細については、こちらをご覧ください。
Zaheer Ahmed 2014

別の言い方をすれば、名前空間には2つの目的があります。1つは、タイプの階層的な「目次」を提供することです。これにより、タイプをより簡単に見つけたり発見したりできます。名前空間の名前を覚えている場合、IntelliSenseはそのタイプの短いリストを提供します。2番目の目的は、名前の衝突を管理および回避することです。名前空間「System」、「Microsoft」、および「Windows」を回避できれば、どのタイプもMicrosoftのタイプと衝突することはありません。
コンクリートカツオドリ2015

16

要するに:

アセンブリ:

アセンブリは、物理コードグループの基本単位を提供します。これは出力単位です。これは、デプロイメントの単位であり、バージョン管理の単位です。アセンブリにはMSILコードが含まれています。

名前空間:

名前空間は、論理コードグループ化の基本単位を提供します。これは、名前のコレクションであり、各名前は一意です。これらは、クラスのグループの論理境界を形成します。名前空間は、Project-Propertiesで指定する必要があります。


15

要するに:

  • アセンブリは、.EXEファイルまたは.DLLファイルとして保存されます。
  • 名前空間は、タイプ名をグループ化し、名前の衝突の可能性を減らす方法です。

チップ。

アセンブリにはタイプのコレクションが含まれます(たとえば、l 'アセンブリシステムには、System、System.IO、eccを含む多くの名前空間が含まれます)。通常、アセンブリの名前は、アセンブリに含まれている名前空間と同じですが、常にそうであるとは限りません。

アセンブリと名前空間の他の例。

アセンブリ1(CoreAssembly.DLL

名前空間が含まれていますNamespace1.subnamespace1

アセンブリ2(ExtensionCoreAssembly.DLL

名前空間が含まれていますNamespace1.subnamespace1

この手法により、異なる名前空間を含むアセンブリの名前を使用し、既存のアセンブリを他のアセンブリで拡張することができます。

定義。

アセンブリ

アセンブリは、機能の論理ユニットを形成するタイプとリソースのコレクションです。.NET Frameworkのすべての型は、アセンブリに存在する必要があります。共通言語ランタイムは、アセンブリ以外の型をサポートしていません。Visual Basic .NETを使用してMicrosoftWindows®アプリケーション、Windowsサービス、クラスライブラリ、またはその他のアプリケーションを作成するたびに、単一のアセンブリを構築します。各アセンブリは、.exeまたは.dllファイルとして保存されます。注複数のファイルにまたがるアセンブリを作成することは技術的には可能ですが、ほとんどの状況でこのテクノロジーを使用することはほとんどありません。

名前空間

Visual Basic .NETコードを整理するもう1つの方法は、名前空間を使用することです。名前空間はアセンブリの代わりではありませんが、アセンブリを補完する2番目の編成方法です。名前空間は、タイプ名をグループ化し、名前の衝突の可能性を減らす方法です。名前空間には、他の名前空間とタイプの両方を含めることができます。タイプのフルネームには、そのタイプを含む名前空間の組み合わせが含まれます。

リンク:http//msdn.microsoft.com/en-us/library/ms973231.aspx


14

それらは名前空間です。アセンブリには複数の名前空間が含まれます。例:System.dllこれらの名前空間(およびそれ以上)が含まれます。

ここに画像の説明を入力してください

また、1つの名前空間にネストされた名前空間が含まれるDLL場合があります。これらはコードを整理するための単なる論理名です。ファイルは名前空間を含むアセンブリであることに注意してください。

GACあるグローバルアセンブリキャッシュにMSDNによると

グローバルアセンブリキャッシュには、コンピューター上の複数のアプリケーションで共有するように特別に指定されたアセンブリが格納されます。

に格納されている一般的に使用されるアセンブリであるGACため、プロジェクトから参照しているプロジェクトディレクトリにすべてのアセンブリファイルをコピーする必要はありません。に格納されてGACいるアセンブリは厳密な名前のアセンブリです。通常、への参照を追加する場合ファイルのStrong-Namedコピーではないプロジェクトからのアセンブリが.dllフォルダに作成されますbin\Debug。必要に応じて、アセンブリ(クラスライブラリプロジェクトなど)をStrong-Namedにすることができます。参照:方法:Strongでアセンブリに署名する名前


では、誰または何が複数のアセンブリを決定するのでしょうか?たくさんの名前空間を持つプロジェクトを作成します。作成されるアセンブリの数と、どの名前空間がどのアセンブリの下に配置されるかを決定するのは何ですか?
eaglei22 2018年

11

他の人はこの質問に非常に良くて詳細な答えを与えました。ただし、よくわからない場合は、MSDNを参照してください。MSDNライブラリは、特定のタイプが存在する名前空間アセンブリを非常に明確かつ簡単に説明しています。ファイルの名前も表示される(in System.Data.dll)ので、あいまいさはありません。

ここに画像の説明を入力してください


9

GACに表示されるファイルSystem.Data.dllは、アセンブリであり、を含む名前空間が含まれているファイルですSystem.Data。Visual Studioで参照プロパティを表示すると、次のように表示されます。

ここに画像の説明を入力してください

後で参照を右クリックしてオブジェクトブラウザでビューを選択すると、その特定のアセンブリに名前空間が表示されます。

ここに画像の説明を入力してください


2
ありがとう...とても素敵な説明... :)
user3125433 2014

6

@amdluigiが言うように、「通常、アセンブリの名前は、アセンブリに含まれる名前空間と同じですが、常にではありません」。

StudioのオブジェクトブラウザにあるSystem.Data.dllの上のスクリーンショットがあります。ここで問題を調査するための優れた例です。アセンブリに含まれる名前空間のほとんどは、System.DataまたはSystem.Dataのサブ名前空間であることに注意してください。

一般に、アセンブリ名はアセンブリ内の名前空間に関連付けることをお勧めします。Studioが最初にアセンブリを構築するプロジェクトを作成するとき、プロジェクトプロパティの1つがデフォルトの名前空間であることに注意してください。開始時に、Studioはデフォルトの名前空間にプロジェクト自体と同じ名前を付けます。プロジェクトの名前を変更することを選択した場合は、デフォルトの名前空間も変更することを検討してください。

2つの追加の名前空間があります。Microsoft.SqlServerは理解できます。別のアセンブリにパッケージ化したくないSQLServerタイプもあります。

しかし、System.Xmlとは何ですか???? System.Xml.dllアセンブリがあります。この名前空間がSystem.Data.dllにも表示されるのはなぜですか?

アセンブリが名前空間を再度開いてさらに追加できることに注意してください。これは、System.Data.dllがSystem.Xml名前空間で行っていることとまったく同じです。

その理由は、名前空間にはパフォーマンスへの影響はありませんが、アセンブリには非常に影響があるためです。大量のコードを含む1000のクラスがある場合、メモリフットプリントが非常に大きい1つのアセンブリは必要ありません。また、それぞれが1つのクラスを持つ1000個のアセンブリも必要ありません。アセンブリの内容を実行する前に、アセンブリをメモリにロードする必要があります。アセンブリに適切な数の相互に関連するクラスを含める必要があるため、アプリケーションがアセンブリをロードしてそのクラスの1つを取得すると、アプリケーションが無料で必要とする可能性のある他のクラスを取得します。粒度は重要です。大きすぎず、小さすぎず、ちょうどいいです。

System.Data.dllがSystem.Xmlを再度開き、XmlDataDocumentという1つのクラスを追加することに注意してください。このクラスは、リレーショナルデータをXMLドキュメントとして解釈するために使用されることがあります。アプリケーションがXMLのみを使用している場合、このクラスは必要ありません。アプリケーションがリレーショナルデータを扱う場合は、そうなる可能性があります。したがって、XmlDataDocumentはXmlDocumentを継承し、System.Xml名前空間にありますが、System.Data.dllアセンブリにパッケージ化されています。

これはすべて、Javaのバックグラウンドがあり、概念が1つしかないパッケージの場合に特に重要です。.NETには、アセンブリと名前空間の2つがあります。2つは直交しています。アセンブリには、明らかに複数の名前空間を含めることができます。アセンブリは名前空間を再度開いてさらに追加できます。つまり、名前空間の型は複数のアセンブリにまたがる場合があります。


3

アセンブリは、論理ユニット、名前空間の物理的なグループ化であり、クラスを論理的にグループ化します。

名前空間は複数のアセンブリにまたがることができます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.