답변:
보다 간단한 용어 : .NET 런타임 환경에서 실행할 수있는 (사전 컴파일 된) 코드 덩어리. .NET 프로그램은 하나 이상의 어셈블리로 구성됩니다.
.classJava 세계 의 파일 과 같은 것 입니까?
어셈블리는 .net 응용 프로그램의 가장 작은 배포 단위입니다. dll 또는 exe 일 수 있습니다 .
주로 두 가지 유형이 있습니다.
개인 어셈블리 : 한 응용 프로그램의 유일한 속성 인 dll 또는 exe입니다. 일반적으로 응용 프로그램 루트 폴더에 저장됩니다.
공용 / 공유 어셈블리 : 한 번에 여러 응용 프로그램에서 사용할 수있는 dll입니다. 공유 어셈블리는 GAC, 즉 Global Assembly Cache에 저장됩니다 .
어려운 소리? Naa ....
GAC는 PC에 설치된 모든 소프트웨어의 공개 어셈블리 / dll을 찾을 수있는 C : \ Windows \ Assembly 폴더입니다.
세 번째이자 가장 적게 알려진 어셈블리 유형 인 Satellite Assembly가 있습니다.
위성 어셈블리에는 이미지 및 응용 프로그램에 필요한 기타 비 실행 파일과 같은 정적 객체 만 포함됩니다.
이것이 독자들을 도울 수 있기를 바랍니다!
어셈블리
응용 프로그램을 컴파일하면 생성 된 MSIL 코드가 어셈블리에 저장됩니다. 어셈블리에는 다른 프로그램 (.exe 파일 확장자가 있음)없이 Windows에서 직접 실행할 수있는 실행 가능한 응용 프로그램 파일과 다른 응용 프로그램에서 사용하기위한 라이브러리 (.dll 확장자가있는)가 모두 포함됩니다.
어셈블리에는 MSIL을 포함 할뿐만 아니라 메타 정보 (즉, 메타 데이터라고도하는 어셈블리에 포함 된 정보에 대한 정보) 및 선택적 리소스 (사운드 파일 및 그림과 같은 MSIL에서 사용하는 추가 데이터)도 포함됩니다. 메타 정보를 통해 어셈블리를 완전히 설명 할 수 있습니다. 어셈블리를 사용하기 위해 다른 정보가 필요하지 않습니다. 즉, 시스템 레지스트리에 필요한 데이터를 추가하지 못하는 등의 상황을 피할 수 있습니다. 이는 다른 플랫폼으로 개발할 때 종종 문제가되었습니다.
즉, 응용 프로그램 배포는 파일을 원격 컴퓨터의 디렉터리에 복사하는 것만 큼 간단합니다. 대상 시스템에는 추가 정보가 필요하지 않으므로이 디렉토리에서 실행 파일을 실행하면됩니다 (.NET CLR이 설치되어 있다고 가정).
물론, 한 곳에서 애플리케이션을 실행하는 데 필요한 모든 것을 포함하고 싶지는 않을 것입니다. 여러 응용 프로그램에 필요한 작업을 수행하는 일부 코드를 작성할 수 있습니다. 그러한 상황에서는 재사용 가능한 코드를 모든 응용 프로그램에서 액세스 할 수있는 장소에 배치하는 것이 유용한 경우가 많습니다. .NET Framework에서 GAC (Global Assembly Cache)입니다. GAC에 코드를 배치하는 것은 간단합니다. 코드를 포함하는 어셈블리를이 캐시가 포함 된 디렉토리에 배치하면됩니다.
어셈블리는 .NET Framework의 클래스가 저장되는 하드 드라이브의 실제 .dll 파일입니다. 예를 들어 ASP.NET Framework에 포함 된 모든 클래스는 System.Web.dll이라는 어셈블리에 있습니다.
보다 정확하게는 어셈블리는 .NET Framework의 기본 배포, 보안 및 버전 제어 단위입니다. 어셈블리는 여러 파일에 걸쳐있을 수 있으므로 종종 "논리"dll이라고합니다.
노트
.NET Framework (버전 2.0)에는 51 개의 어셈블리가 포함되어 있습니다.
개인 및 공유의 두 가지 유형의 어셈블리가 있습니다. 개인 어셈블리는 단일 응용 프로그램에서만 사용할 수 있습니다. 반면에 공유 어셈블리는 동일한 서버에있는 모든 응용 프로그램에서 사용할 수 있습니다.
공유 어셈블리는 GAC (전역 어셈블리 캐시)에 있습니다. 예를 들어 System.Web.dll 어셈블리와 .NET Framework에 포함 된 다른 모든 어셈블리는 전역 어셈블리 캐시에 있습니다.
노트
전역 어셈블리 캐시는 실제로 컴퓨터의 \ WINDOWS \ Assembly 폴더에 있습니다. \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 폴더에는 모든 어셈블리의 복사본이 별도로 있습니다. 첫 번째 어셈블리 집합은 런타임에 사용되고 두 번째 집합은 컴파일 타임에 사용됩니다.
응용 프로그램의 어셈블리에 포함 된 클래스를 사용하려면 먼저 어셈블리에 대한 참조를 추가해야합니다. 기본적으로 ASP.NET 응용 프로그램은 전역 어셈블리 캐시에 포함 된 가장 일반적인 어셈블리를 참조합니다.
mscorlib.dll
System.dll
System.Configuration.dll
System.Web.dll
System.Data.dll
System.Web.Services.dll
System.Xml.dll
System.Drawing.dll
System.EnterpriseServices.dll
System.Web.Mobile.dll
.NET Framework에서 특정 클래스를 사용하려면 두 가지 작업을 수행해야합니다. 먼저 응용 프로그램에서 클래스가 포함 된 어셈블리를 참조해야합니다. 둘째, 응용 프로그램은 클래스와 연결된 네임 스페이스를 가져와야합니다.
대부분의 경우 가장 일반적인 어셈블리가 자동으로 참조되므로 필요한 어셈블리를 참조하는 것에 대해 걱정할 필요가 없습니다. 그러나 특수 어셈블리를 사용해야하는 경우 어셈블리에 명시 적으로 참조를 추가해야합니다. 예를 들어 System.DirectoryServices 네임 스페이스의 클래스를 사용하여 Active Directory와 상호 작용해야하는 경우 응용 프로그램에 System.DirectoryServices.dll 어셈블리에 대한 참조를 추가해야합니다.
.NET Framework SDK 설명서의 각 클래스 항목에는 클래스와 관련된 어셈블리 및 네임 스페이스가 나열되어 있습니다. 예를 들어 설명서에서 MessageQueue 클래스를 조회하면이 클래스가 System.Messaging.dll 어셈블리에있는 System.Messaging 네임 스페이스에 있음을 알 수 있습니다.
Visual Web Developer를 사용하는 경우 메뉴 옵션 웹 사이트, 참조 추가를 선택하고 참조해야하는 어셈블리 이름을 선택하여 어셈블리에 대한 참조를 명시 적으로 추가 할 수 있습니다. 예를 들어, System.Messaging.dll 어셈블리에 대한 참조를 추가하면 Listing 1.4의 웹 구성 파일이 애플리케이션에 추가됩니다.
예 : Web.Config
enter code here
Visual Web Developer를 사용하지 않으려면 위 예제에서 파일을 직접 작성하여 System.Messaging.dll 어셈블리에 대한 참조를 추가 할 수 있습니다.
Wikipedia는 다음과 같이 말합니다.
Microsoft .NET 프레임 워크에서 어셈블리는 배포, 버전 관리 및 보안에 사용하기 위해 부분적으로 컴파일 된 코드 라이브러리입니다. 프로세스 어셈블리 (EXE)와 라이브러리 어셈블리 (DLL)의 두 가지 유형이 있습니다. 프로세스 어셈블리는 라이브러리 어셈블리에 정의 된 클래스를 사용하는 프로세스를 나타냅니다. .NET 어셈블리에는 일반적으로 CLI 언어에서 생성 된 다음 CLR JIT (Just-In-Time) 컴파일러에 의해 런타임에 기계 언어로 컴파일되는 CIL 코드가 포함되어 있습니다. 어셈블리는 하나 이상의 파일로 구성 될 수 있습니다. 코드 파일을 모듈이라고합니다. 어셈블리에는 둘 이상의 코드 모듈이 포함될 수 있으며 다른 언어를 사용하여 코드 모듈을 만들 수 있으므로 기술적으로 여러 언어를 사용하여 어셈블리를 만들 수 있습니다.
당신이 정말로 찾아 보았다면 이해하지 못하는 것을 명확히하면 도움이 될 것입니다.
어셈블리는 유형 및 기타 리소스로 구성된 런타임 단위입니다. 어셈블리의 모든 유형은 동일한 버전 번호를 갖습니다.
종종 하나의 어셈블리에는 네임 스페이스가 하나만 있으며 하나의 프로그램에서 사용됩니다. 그러나 여러 네임 스페이스에 걸쳐있을 수 있습니다. 또한 하나의 네임 스페이스가 여러 어셈블리에 분산 될 수 있습니다. 대규모 설계에서 어셈블리는 매니페스트 (예 : 목차)로 함께 보유되는 여러 파일로 구성 될 수 있습니다.
C #에서 어셈블리는 .Net 응용 프로그램의 가장 작은 배포이며 dll 또는 exe 일 수 있으며 두 가지 유형이 있습니다. 1. 개인 어셈블리 2. 공개 / 공유 어셈블리
허용되는 답변 외에도 예를 들겠습니다.
예를 들어, 우리 모두는
System.Console.WriteLine()
그러나 System.Console.WriteLine!의 코드는 어디에 있습니까?
실제로 콘솔에 텍스트를 넣는 코드는 무엇입니까?
Console 클래스 에 대한 설명서 의 첫 페이지를 보면 맨 위 근처에 다음이 표시됩니다. 어셈블리 : mscorlib (mscorlib.dll) 콘솔 클래스 코드가 어셈블리에 있음을 나타냅니다. 이름이 mscorlib입니다. 어셈블리는 여러 개의 파일로 구성 될 수 있지만이 경우에는 하나의 파일 일 뿐이며 동적 링크 라이브러리 mscorlib.dll입니다.
mscorlib.dll 파일은 .NET에서 매우 중요하며 .NET에서 클래스 라이브러리의 기본 DLL이며 모든 기본 .NET 클래스와 구조를 포함합니다.
C 또는 C ++를 알고 있다면 일반적으로 맨 위에 헤더 파일을 참조하는 #include 지시문이 필요합니다. 포함 파일은 함수 프로토 타입을 컴파일러에 제공합니다. 대조적으로 C # 컴파일러에는 헤더 파일이 필요하지 않습니다. 컴파일하는 동안 C # 컴파일러는 mscorlib.dll 파일에 직접 액세스하여 해당 파일의 메타 데이터에서 정의 된 모든 클래스 및 기타 유형에 대한 정보를 얻습니다.
C # 컴파일러는 mscorlib.dll이 실제로 문자열 형식의 단일 인수를 허용하는 WriteLine이라는 메서드를 사용하여 System이라는 네임 스페이스에 Console이라는 클래스를 포함하도록 설정할 수 있습니다.
C # 컴파일러는 WriteLine 호출이 유효한지 확인할 수 있으며 컴파일러는 실행 파일에서 mscorlib 어셈블리에 대한 참조를 설정합니다.
기본적으로 C # 컴파일러는 mscorlib.dll에 액세스하지만 다른 DLL의 경우 클래스가 위치한 어셈블리를 컴파일러에 알려야합니다. 이것을 참조라고합니다.
나는 그것이 분명하기를 바랍니다!
DotNetBook에서 Zero Charles pitzold
MSDN에 대한 좋은 설명이 있습니다 .
어셈블리는 .NET Framework 응용 프로그램의 빌딩 블록입니다. 배포, 버전 제어, 재사용, 활성화 범위 및 보안 권한의 기본 단위를 구성합니다. 어셈블리는 함께 작동하고 논리적 기능 단위를 형성하도록 구축 된 유형 및 리소스 모음입니다. 어셈블리는 공용 언어 런타임에 형식 구현에 대해 알아야하는 정보를 제공합니다. 런타임에는 형식이 어셈블리 컨텍스트 외부에 존재하지 않습니다.
어셈블리는 논리적 기능 단위를 형성하는 유형 및 리소스 모음입니다. .NET Framework의 모든 유형은 어셈블리에 있어야합니다. 공용 언어 런타임은 어셈블리 외부의 유형을 지원하지 않습니다. Visual Basic .NET을 사용하여 Microsoft Windows® 응용 프로그램, Windows 서비스, 클래스 라이브러리 또는 기타 응용 프로그램을 만들 때마다 단일 어셈블리를 작성합니다. 각 어셈블리는 .exe 또는 .dll 파일로 저장됩니다.
출처 : https://msdn.microsoft.com/en-us/library/ms973231.aspx#assenamesp_topic4
저와 같은 Java 배경을 가진 사람들에게는 다음 다이어그램이 개념을 명확히하기를 바랍니다.
어셈블리는 jar 파일 (여러 개의 .class 파일 포함)과 같습니다. 코드는 기존 어셈블리를 참조하거나 코드 자체를 다른 코드가 참조하고 사용하기위한 어셈블리로 게시 할 수 있습니다 (프로젝트 종속성에 추가 할 수있는 jar 파일로 Java로 생각할 수 있음).
하루가 끝나면 어셈블리는 CLR이 설치된 모든 운영 체제에서 실행할 수있는 컴파일 된 코드입니다. 이것은 .class 파일 또는 번들 jar이 JVM이 설치된 모든 시스템에서 실행될 수 있다고 말하는 것과 같습니다.
이 링크가 매우 유용하다는 것을 알았습니다. 또한 .NET에서 IL이 어떻게 역할을하는지 엿볼 수 있습니다.
http://www.codeguru.com/columns/csharp_learning/article.php/c5845/C-FAQ-15--What-is-an-Assembly.htm
Visual Studio 솔루션은 하나 이상의 프로젝트로 구성됩니다. 예 : 콘솔 프로젝트는 어셈블리를 생성 할 수 있습니다 . 어셈블리는 고객에게 제공 될 수있는 논리적으로 코드 덩어리이며 물리적으로 .EXE (실행 가능 프로그램) 또는 .DLL (다른 프로그램에서 재사용 가능)입니다.
어셈블리에는 내용, 버전 관리 및 종속성에 대한 정보가 포함되어 있으며이를 사용하는 응용 프로그램은 Windows 시스템의 레지스트리와 같은 외부 소스에 의존 할 필요가 없습니다. 어셈블리는 .dll 충돌을 줄이고 응용 프로그램을보다 안정적이고 배포하기 쉽게 만듭니다.
논리적으로 작동하는 기능 단위를 구성하고 함께 작동하도록 구축 된 유형 및 리소스 모음입니다. 어셈블리는 실행 파일 (.exe) 또는 동적 링크 라이브러리 (.dll) 파일 형식을 취하며 .NET 응용 프로그램의 구성 요소입니다. 유형 구현을 인식하는 데 필요한 정보를 공용 언어 런타임에 제공합니다.
모든 어셈블리에는 어셈블리 매니페스트 파일이 있습니다. 어셈블리 매니페스트에 포함 된 목차와 유사하게 :
응용 프로그램에서 어셈블리를 사용하려면 참조를 추가해야합니다. 어셈블리가 참조되면 액세스 가능한 모든 유형, 속성, 메서드 및 네임 스페이스의 다른 멤버를 마치 코드가 소스 파일의 일부인 것처럼 응용 프로그램에서 사용할 수 있습니다.
우리는 모두 소스 코드가 MSIL (Microsoft Intermediate Language)로 변환되었음을 알고 있습니다. 런타임시 CLR (Common Languge Runtime) JIT 컴파일러를 사용하여 MSIL을 원시 코드로 변환합니다. MSIL 코드를 변환하기 전에 MSIL + MetaData (어셈블리 이름, 버전, 참조)를 검사하는 검증 프로세스를 통과해야합니다. 확인을 통과하면 MSIL이 기본 코드로 변환됩니다. 모든 호출 된 메소드는 기계 언어로 변환되고 이후 사용을 위해 캐시에 저장됩니다.