[c#] 네임 스페이스 또는 어셈블리?

네임 스페이스와 어셈블리간에 매우 혼란스러워지고 있습니다. 인가 System.DataSystem.Web네임 스페이스 또는 어셈블리?

나는 이것들이 네임 스페이스라고 불리는 동시에 GAC_32폴더에 존재한다는 것을 알아 차 렸습니다 . 그래서 정확히 무엇입니까?



답변

System.DataA는 네임 스페이스 , System.Data.DLL(파일)이 있습니다 조립 .

네임 스페이스는 유형의 논리적 그룹입니다 (대부분 이름 충돌을 방지하기 위해). 어셈블리는 여러 네임 스페이스의 유형을 포함 할 수 있으며 ( System.DLL몇 개 포함), 단일 네임 스페이스는 어셈블리에 분산 될 수 있습니다 (예 🙂 System.Threading.


답변

네임 스페이스 는 동일한 기능에 속하는 클래스의 논리적 그룹입니다. 그래서System.WebSystem.Data네임 스페이스는

MSDN은 다음과 같이 설명합니다.

네임 스페이스는 C # 프로그래밍에서 두 가지 방식으로 많이 사용됩니다. 첫째, .NET Framework는 네임 스페이스를 사용하여 많은 클래스를 구성합니다. 둘째, 자체 네임 스페이스를 선언하면 대규모 프로그래밍 프로젝트에서 클래스 및 메서드 이름의 범위를 제어하는 ​​데 도움이 될 수 있습니다.

네임 스페이스

어셈블리 는 .NET 런타임 환경에서 실행할 수있는 (미리 컴파일 된) 코드 덩어리입니다. 하나 이상의 네임 스페이스를 포함합니다. .NET 프로그램은 하나 이상의 어셈블리로 구성됩니다.

System.Web.dll그리고 System.Data.dll어셈블리입니다.

MSDN은 다음과 같이 설명합니다.

어셈블리는 .NET Framework 응용 프로그램의 구성 요소입니다. 배포, 버전 제어, 재사용, 활성화 범위 지정 및 보안 권한의 기본 단위를 형성합니다. 어셈블리는 함께 작동하고 기능의 논리적 단위를 형성하도록 빌드 된 유형 및 리소스의 모음입니다. 어셈블리는 형식 구현을 인식하는 데 필요한 정보를 공용 언어 런타임에 제공합니다. 런타임에는 어셈블리 컨텍스트 외부에 형식이 존재하지 않습니다.

어셈블리


답변

요컨대 :

어셈블리:

어셈블리는 물리적 코드 그룹화의 기본 단위를 제공하며 출력 단위입니다. 배포 단위 및 버전 관리 단위입니다. 어셈블리에는 MSIL 코드가 포함되어 있습니다.

네임 스페이스 :

네임 스페이스는 논리적 코드 그룹화의 기본 단위를 제공합니다. 네임 스페이스는 각 이름에서 고유 한 이름의 컬렉션입니다. 클래스 그룹에 대한 논리적 경계를 형성합니다 .Namespace는 Project-Properties에서 지정해야합니다 .Namespace must be specified in Project-Properties.


답변

요컨대 :

  • 어셈블리는 .EXE 또는 .DLL 파일로 저장됩니다.
  • 네임 스페이스는 유형 이름을 그룹화하고 이름 충돌 가능성을 줄이는 방법입니다.

팁.

어셈블리에는 형식 컬렉션이 포함됩니다 (예 : l’ assembly System에는 System, System.IO, ecc를 포함한 많은 네임 스페이스가 포함됨). 일반적으로 어셈블리의 이름은 포함 된 네임 스페이스와 동일하지만 항상 그런 것은 아닙니다.

어셈블리 및 네임 스페이스의 다른 예.

어셈블리 1 ( CoreAssembly.DLL )

네임 스페이스 Namespace1.subnamespace1을 포함합니다.

어셈블리 2 ( ExtensionCoreAssembly.DLL )

네임 스페이스 Namespace1.subnamespace1을 포함합니다.

다른 네임 스페이스를 포함하는 어셈블리의 이름을 사용하고이 기술을 사용하여 기존 어셈블리를 다른 어셈블리로 확장 할 수 있습니다.

정의.

어셈블리

어셈블리는 기능의 논리적 단위를 형성하는 유형 및 리소스의 모음입니다. .NET Framework의 모든 형식은 어셈블리에 있어야합니다. 공용 언어 런타임은 어셈블리 외부의 형식을 지원하지 않습니다. Visual Basic .NET을 사용하여 Microsoft Windows® 응용 프로그램, Windows 서비스, 클래스 라이브러리 또는 기타 응용 프로그램을 만들 때마다 단일 어셈블리를 빌드하게됩니다. 각 어셈블리는 .exe 또는 .dll 파일로 저장됩니다. 참고 여러 파일에 걸쳐있는 어셈블리를 만드는 것이 기술적으로 가능하지만 대부분의 상황에서이 기술을 사용하지는 않습니다.

네임 스페이스

Visual Basic .NET 코드를 구성하는 또 다른 방법은 네임 스페이스를 사용하는 것입니다. 네임 스페이스는 어셈블리를 대체하는 것이 아니라 어셈블리를 보완하는 두 번째 구성 방법입니다. 네임 스페이스는 유형 이름을 그룹화하고 이름 충돌 가능성을 줄이는 방법입니다. 네임 스페이스는 다른 네임 스페이스와 유형을 모두 포함 할 수 있습니다. 유형의 전체 이름에는 해당 유형을 포함하는 네임 스페이스 조합이 포함됩니다.

링크 : http://msdn.microsoft.com/en-us/library/ms973231.aspx


답변

이들은 네임 스페이스입니다. 어셈블리에는 둘 이상의 네임 스페이스가 포함됩니다. 예 : System.dll다음 네임 스페이스 (및 그 이상)를 포함합니다 .For example : contains these namespaces (and more) :

여기에 이미지 설명 입력

또한 하나의 네임 스페이스에는 중첩 된 네임 스페이스가 포함될 수 있습니다. 또한 코드를 구성하기위한 논리적 이름 일뿐입니다. DLL파일은 네임 스페이스가 포함 된 어셈블리입니다.

GAC이다 전역 어셈블리 캐시 . MSDN 에 따르면 :

전역 어셈블리 캐시는 컴퓨터의 여러 응용 프로그램에서 공유하도록 특별히 지정된 어셈블리를 저장합니다.

그래서 일반적으로에 저장된 어셈블리를 사용 GAC하기 때문에 당신은 당신이에 저장된 project.The 어셈블리에서 참조되는 프로젝트 디렉토리에있는 모든 어셈블리 파일을 복사 할 필요가 없습니다 GAC있는 강력한 이름의 당신은에 대한 참조를 추가 할 때 assemblies.Normally 파일 Strong-Named의 복사본 이 아닌 프로젝트의 어셈블리가 폴더에 .dll생성됩니다. bin\Debug어셈블리 (예 : 클래스 라이브러리 프로젝트)를 Strong-Named로 만들 수 있습니다. 참조 : 방법 : Strong으로 어셈블리에 서명 이름


답변

다른 사람들은이 질문에 대해 매우 훌륭하고 상세한 답변을 제공했습니다. 그러나 확실하지 않은 경우 MSDN을 살펴볼 수 있음을 지적하고 싶습니다. MSDN 라이브러리는 주어진 유형이있는 네임 스페이스어셈블리 를 매우 명확하고 간단하게 설명 합니다. (in System.Data.dll)모호함이 없도록 파일 이름도 표시됩니다 .

여기에 이미지 설명 입력


답변

GAC에서 볼 수있는 파일 System.Data.dll은 어셈블리이며 System.Data. Visual Studio에서 참조 속성을 보면 다음이 표시됩니다.

여기에 이미지 설명 입력

나중에 참조를 마우스 오른쪽 버튼으로 클릭하고 개체 브라우저에서보기를 선택하면 해당 특정 어셈블리에 네임 스페이스가 표시됩니다.

여기에 이미지 설명 입력