C # 또는 .NET의 어셈블리는 정확히 무엇입니까?


102

C # 또는 .NET에서 어셈블리가 무엇인지 설명해 주시겠습니까?

  1. 어디에서 시작하고 어디에서 끝날까요?
  2. 어셈블리에 대해 알아야 할 중요한 정보는 무엇입니까?

5
엄밀히 말하면 어셈블리가 C # 개념이 아니라 .NET 개념이 아닙니까?
— JeffH 09-01-01

14
@JeffH : 질문을했을 때 C # 개념이라고 생각했습니다. 이제 .NET이라는 것을 이해합니다. 나는 다른 사람들이 나처럼 혼동 할 수있다 생각 때문에 구글이 실수를 수용하는 그럼에도 불구하고, 나는 의도적으로 변경하지 않았다 ...
— Roee 애들러

답변:


114

어셈블리는 일반적으로 DLL 인 코드의 컴파일 된 출력이지만 EXE도 어셈블리입니다. 모든 .NET 프로젝트를위한 가장 작은 배포 단위입니다.

일반적으로 어셈블리에는 지정된 컴퓨터에서 처음 실행될 때 네이티브 코드 ( "JITted"-Just-In-Time 컴파일러에 의해 컴파일 됨)로 컴파일되는 MSIL (Microsoft Intermediate 언어)의 .NET 코드가 포함되어 있습니다. 컴파일 된 코드도 어셈블리에 저장되고 후속 호출에서 재사용됩니다.

어셈블리에는 아이콘, 비트 맵, 문자열 테이블 등과 같은 리소스도 포함될 수 있습니다. 또한 어셈블리는 버전 번호, 강력한 이름, 문화권, 참조 된 어셈블리 등과 같은 정보와 같은 어셈블리 매니페스트의 메타 데이터도 포함합니다.

99 %의 경우에서 하나의 어셈블리는 디스크의 실제 파일과 동일합니다. 다중 파일 어셈블리 (하나의 파일 이상에 분산 된 하나의 어셈블리)의 경우는 제가보기에 다소 이상한 경우로 보입니다. 5 년 이상의 .NET 개발에서 지금까지 본 적이 없습니다.

다중 파일 어셈블리에는 DLL 또는 EXE에 하나의 어셈블리 매니페스트 만 있고 여러 netmodule 파일에 MSIL 코드가 있습니다.


1
@marc_s : 다중 어셈블리 파일을 의미한다고 생각합니다. Studio의 명령 줄 도구를 통해 단일 파일 내에서 여러 어셈블리를 패키징 할 수 있지만 IDE를 통해 직접 패키징 할 수는 없습니다.
— Greg D

5
어셈블리에서 매우 중요한 것은 어셈블리 매니페스트의 메타 데이터입니다. 매니페스트에는 버전, 강력한 이름, 문화권, 참조 된 어셈블리 등과 같은 정보가 있습니다. 다중 파일 어셈블리에는 여전히 dll 또는 exe에 어셈블리 매니페스트가 하나만 있고 여러 .netmodule 파일에 MSIL 코드가 있습니다. 기본적으로 어셈블리는> net에서 배포의 최소 단위입니다
— softveda

@marc_s : 당신이 대답에 Pratik의 관점 @ 감사를 추가하면 나는 그것을 감사하겠습니다
— Roee 애들러

@rax : 완료; @pratik : 이제 저를 헷갈 리게 하시네요. "다중 파일 어셈블리"에 대해 다시 얘기했지만 @GregD는 정말 "다중 어셈블리 파일"이라고 언급했습니다. 지금은 무엇입니까 ?? (내가 말했듯이-나는 그런 짐승을 만나 본 적이 없기 때문에 파일 당 여러 어셈블리인지 아니면 어셈블리 당 여러 파일인지 약간 불분명합니다 ....)
— marc_s

3
"컴파일 된 코드도 어셈블리에 저장되고 후속 호출에서 재사용됩니다." 이것은 오해의 소지가 있거나 명확하지 않습니다. 컴파일 된 코드는 어셈블리에 "저장"되지 않습니다. 처음 호출 될 때 각 메서드 / 함수가 네이티브 코드에 "지트"되는 방식을 언급 할 수 있습니다. 그런 다음 어셈블리가 메모리에있는 동안 메서드의 네이티브 코드 버전이 호출됩니다. 어셈블리가 언로드되고 나중에 다시로드되면 jit 프로세스가 다시 발생합니다. 물론 이것은 어셈블리를 네이티브 코드로 사전 컴파일하기 위해 NGEN을 사용하지 않는다고 가정합니다 (권장하지 않음).
— 애쉬

13

.NET 어셈블리

Microsoft .NET 프레임 워크에서 어셈블리는 배포, 버전 관리 및 보안에 사용하기 위해 부분적으로 컴파일 된 코드 라이브러리입니다.


7

http://www.codeguru.com/columns/csharp_learning/article.php/c5845

어셈블리는 모든 .NET 응용 프로그램을 성공적으로 컴파일 할 때 컴파일러에서 자동으로 생성되는 파일입니다. 동적 링크 라이브러리 또는 실행 파일 일 수 있습니다. 응용 프로그램에 대해 한 번만 생성되며 이후의 각 컴파일시 어셈블리가 업데이트됩니다.


2
어셈블리는이를 포함하는 파일과 다릅니다.
— Greg D

1
@Raghav-천상을 위해 캐주얼 한 것으로 사진을 업데이트하십시오! 우리는 여권을 위해 여기에서 포즈를 취하는 것이 아닙니다.
— TheFlash

3

다음 은 작은 인용문 인 .NET 어셈블리 구성에 대한 또 다른 설명입니다.

.NET 프레임 워크는 메타 데이터와 매니페스트 정보를 모두 저장하는 모듈, 어셈블리의 개념으로 구성됩니다. 어셈블리에는 여러 모듈이 포함될 수 있습니다. Visual C #은 C # 컴파일러 (csc.exe)에 의해 어셈블리로 변환되는 하나의 모듈 만 생성하지만 어셈블리는 어셈블리 링커 (al.exe) 명령 줄 도구를 통해 여러 .NET 모듈을 함께 연결할 수 있습니다. 예를 들어 각 소스 코드 .cs 파일을 모듈로 컴파일하고 함께 연결하여 어셈블리를 형성 할 수 있습니다. 어셈블리는 모듈과 리소스의 모음 일뿐입니다. 그러나 이러한 모듈 중 하나입니다. 어셈블리에 대한 매니페스트 메타 데이터 (아래 참조) 정보를 포함해야 CLR에서 이해할 수 있습니다.
....
VS.NET에서 새 .exe 또는 .dll을 생성하면 파일이 bin 폴더에 나타납니다. 메모장에서 열면 횡설수설이 나오거나 파일의 구조를 모르고 16 진 편집기 내에서도 의미를 나타내려면 ildasm.exe 또는 CFF 탐색기와 같은 도구가 필요합니다. 어셈블리의 구조는 다음과 같습니다.

PE 헤더
CLR 헤더
CLR 메타 데이터
CLR
IL 코드
네이티브 데이터


그 링크가 날 어디로 데려가는 거지? 일종의 무한 리디렉션! 몇 리디렉션 후에는 말한다 페이지에 데려 이 . 게시 한 URL의 원본을 얻을 수있는 방법도 없습니다.
— Sнаđошƒаӽ

2

대답은 즉시 파악하기위한 것입니다.

간단히 말해, 클래스 및 추가 파일이있는 경우 컴파일 된 프로젝트입니다. 즉, 솔루션의 각 프로젝트는 assembly 입니다.

또는 더 기술적으로

는 어셈블리 타입은 flesystem에 저장되는 곳이다. 어셈블리는 코드 배포를위한 메커니즘입니다. 예를 들어 System.Data.dll 어셈블리에는 데이터 관리를위한 형식이 포함되어 있습니다. 다른 어셈블리에서 형식을 사용하려면 참조되어야합니다. - 출처

우리는 그것을 어떻게 압니까? 솔루션 아래의 프로젝트 속성을 살펴보면 다음 이미지를 볼 수 있습니다.

프로젝트를 컴파일하면 DLL 또는 EXE로 나타납니다 .

여기에 이미지 설명 입력 여기에 이미지 설명 입력 여기에 이미지 설명 입력


1

소스 코드가 언어 컴파일러에 의해 컴파일되면 관리되는 어셈블리 와 MSIL (MisroSoft Intermediate Language)이 생성됩니다. 해당 어셈블리에는 .dll 또는 .exe 파일이 포함되어 있습니다 . Assebmly는 Private Assembly 와 Shared Assembly 의 두 가지 유형이 될 수 있으며 , 공유 Assembly는 GAC (Global Assembly Cache)에 저장 되므로 모든 응용 프로그램에서 참조 할 수 있고 Private 어셈블리는 하나의 응용 프로그램에서만 사용할 수있는 응용 프로그램 폴더에 저장됩니다.


0

어셈블리는 게시하거나 애플리케이션을 컴파일 할 때 생성되는 DLL 또는 EXE입니다.


0

어셈블리는 논리 단위의 모음입니다. 논리 단위는 애플리케이션을 빌드하고 .Net 프레임 워크를 사용하여 배포하는 데 필요한 유형 및 리소스를 나타냅니다. 기본적으로 Assembly는 Exe와 DLL의 모음입니다. 이식 가능하고 실행 가능합니다.


-1

프로그램 (프로젝트)의 소스 코드를 작성한 후 프로젝트에 따라 DLL 또는 EXE 파일이 생성됩니다. 단일 프로젝트에 대해 한 번만 만듭니다. 두 가지 유형이 있습니다. 1 :-단일 2 :-단일 프로그램에서만 사용되는 공유 또는 다중 프로그램 단일 어셈블리, 공유는 다중 프로그램에 사용할 수 있습니다.


프로그램 (프로젝트)의 소스 코드를 작성한 후 프로젝트에 따라 DLL 또는 EXE 파일이 생성됩니다 . 소스 코드를 작성한 후? 그 파일이 언제 생성 되었는지에 대한 좋은 표시가 아닌 것 같습니다 . 질문에서 BTW는 중요하지 않습니다.
— Sнаđошƒаӽ jul.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.