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 AssemblyShared 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.