Programing

네임 스페이스 또는 어셈블리?

lottogame 2020. 10. 9. 08:43
반응형

네임 스페이스 또는 어셈블리?


네임 스페이스와 어셈블리간에 매우 혼란스러워지고 있습니다. 인가 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.


이들은 네임 스페이스입니다. 어셈블리에는 둘 이상의 네임 스페이스가 포함됩니다. 예 : 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으로 어셈블리에 서명 이름


요컨대 :

  • 어셈블리는 .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


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

여기에 이미지 설명 입력


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

여기에 이미지 설명 입력

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

여기에 이미지 설명 입력


@amdluigi가 말했듯이 "보통 어셈블리의 이름은 포함 된 네임 스페이스와 동일하지만 항상 그런 것은 아닙니다."

There is a screenshot above of System.Data.dll in the Object Browser in Studio. It's an excellent example to explore the issues here. Note that most of the namespaces contained within the assembly are System.Data or a sub-namespace of System.Data.

In general, it is a good practice for assembly names to be related to the namespaces within them. Notice that when Studio first creates a project to build an assembly, one of the project properties is a default namespace. At the start, Studio gives default namespace the same name as the project itself. If you ever choose to rename a project, do consider changing its default namespace as well.

There are two extra namespaces: Microsoft.SqlServer is understandable. Some SQL Server types that they didn't want to package in a separate assembly.

But what's with System.Xml???? There is a System.Xml.dll assembly. Why is this namespace showing up in System.Data.dll as well?

Notice that an assembly can reopen a namespace and add more to it - that's exactly what System.Data.dll is doing with the System.Xml namespace.

The reason is that namespaces have zero performance implications, but assemblies very much do. If you have 1000 classes with substantial amounts of code, you don't want one assembly with a very large memory footprint. Neither do you want 1000 assemblies each with one class. Any assembly needs to be loaded into memory before its contents can be executed. You want an assembly to contain a reasonable number of interrelated classes, so once your application has loaded an assembly to obtain one of its classes, it gets other classes the application is likely to need for free. Granularity is important: not too big, not too small, just right.

Notice that System.Data.dll reopens System.Xml and adds exactly one class: XmlDataDocument. It happens that this class is used to interpret relational data as an XML document. If your application is just using XML, it won't need this class. If your application deals with relational data, it might. So while XmlDataDocument inherits from XmlDocument and is in the System.Xml namespace, it's packaged in the System.Data.dll assembly.

All this is particularly important if you have a background with Java, where there is only one concept, the package. In .NET there are two, the assembly and the namespace. The two are orthogonal. An assembly can obviously contain more than one namespace. An assembly can reopen a namespace and add more to it - in other words, the types in a namespace may span more than one assembly.


어셈블리는 논리적 단위, 네임 스페이스, 논리적으로 클래스를 그룹화하는 물리적 그룹입니다.

네임 스페이스는 여러 어셈블리에 걸쳐있을 수 있습니다.

참고 URL : https://stackoverflow.com/questions/21530460/namespace-or-assembly

반응형