어셈블리의 이름은 메타데이터에 저장되며 어셈블리의 범위와 애플리케이션의 사용에 큰 영향을 미칩니다. 강력한 이름의 어셈블리에는 어셈블리의 이름, 문화권, 공개 키, 버전 번호 및 필요에 따라 프로세서 아키텍처를 포함하는 정규화된 이름이 있습니다. FullName 로드된 어셈블리의 표시 이름이라고도 하는 정규화된 이름을 가져오려면 이 속성을 사용합니다.
런타임은 이름 정보를 사용하여 어셈블리를 찾고 이름이 같은 다른 어셈블리와 구분합니다. 예를 들어 myTypes이라는 강력한 이름의 어셈블리는 다음과 같은 전체 정규화된 이름을 가질 수 있습니다.
myTypes, Version=1.0.1234.0, Culture=en-US, PublicKeyToken=b77a5c561934e089c, ProcessorArchitecture=msil
이 예제에서 어셈블리의 정규화된 이름은 myTypes 공개 키 토큰을 가진 강력한 이름을 가지고 있고, 미국 영어의 문화 값을 가지고 있으며, 버전 번호가 1.0.1234.0임을 나타냅니다. 프로세서 아키텍처는 msil운영 체제 및 프로세서에 따라 JIT(Just-In-Time)가 32비트 코드 또는 64비트 코드로 컴파일됨을 의미합니다.
팁 (조언)
이 ProcessorArchitecture 정보를 통해 프로세서별 버전의 어셈블리가 허용됩니다. 프로세서 아키텍처(예: 32비트 및 64비트 프로세서별 버전)에서만 ID가 다른 어셈블리 버전을 만들 수 있습니다. 강력한 이름에는 프로세서 아키텍처가 필요하지 않습니다. 자세한 내용은 AssemblyName.ProcessorArchitecture를 참조하세요.
어셈블리의 형식을 요청하는 코드는 정규화된 어셈블리 이름을 사용해야 합니다. 이를 정규화된 바인딩이라고 합니다. 어셈블리 이름만 지정하는 부분 바인딩은 .NET Framework에서 어셈블리를 참조할 때 허용되지 않습니다.
.NET Framework를 구성하는 어셈블리에 대한 모든 어셈블리 참조에는 어셈블리의 정규화된 이름도 포함되어야 합니다. 예를 들어 버전 1.0에 대한 System.Data .NET Framework 어셈블리에 대한 참조에는 다음이 포함됩니다.
System.data, version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
버전은 .NET Framework 버전 1.0과 함께 제공된 모든 .NET Framework 어셈블리의 버전 번호에 해당합니다. .NET Framework 어셈블리의 경우 문화권 값은 항상 중립적이며 공개 키는 위의 예제와 동일합니다.
예를 들어 추적 수신기를 설정하기 위해 구성 파일에 어셈블리 참조를 추가하려면 시스템 .NET Framework 어셈블리의 정규화된 이름을 포함합니다.
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />
비고
런타임은 어셈블리를 바인딩할 때 어셈블리 이름의 대/소문자를 구분하지 않지만, 어셈블리 이름에 사용된 대/소문자는 그대로 유지합니다. Windows SDK의 여러 도구는 어셈블리 이름을 대/소문자를 구분하는 것으로 처리합니다. 최상의 결과를 위해 대/소문자를 구분하는 것처럼 어셈블리 이름을 관리합니다.
애플리케이션 구성 요소 이름 지정
런타임은 어셈블리의 ID를 결정할 때 파일 이름을 고려하지 않습니다. 어셈블리 이름, 버전, 문화권 및 강력한 이름으로 구성된 어셈블리 ID는 런타임에 명확해야 합니다.
예를 들어 myAssembly.dll 어셈블리를 참조하는 myAssembly.exe호출된 어셈블리가 있는 경우 myAssembly.exe실행하면 바인딩이 올바르게 수행됩니다. 그러나 다른 애플리케이션이 myAssembly.exe를 메서드AppDomain.ExecuteAssembly를 사용하여 실행하는 경우, myAssembly이 와의 바인딩을 요청할 때 런타임은 myAssembly이 이미 로드된 것을 확인합니다. 이 경우 myAssembly.dll 로드되지 않습니다.
myAssembly.exe 요청된 형식 TypeLoadException 을 포함하지 않으므로 발생합니다.
이 문제를 방지하려면 애플리케이션을 구성하는 어셈블리에 동일한 어셈블리 이름이 없거나 이름이 같은 어셈블리를 다른 디렉터리에 배치해야 합니다.
비고
.NET Framework에서 강력한 이름의 어셈블리를 전역 어셈블리 캐시에 배치하는 경우 어셈블리의 파일 이름은 .exe 또는 .dll같은 파일 이름 확장명을 포함하지 않고 어셈블리 이름과 일치해야 합니다. 예를 들어 어셈블리의 파일 이름이 myAssembly.dll경우 어셈블리 이름은 여야 myAssembly합니다. 루트 애플리케이션 디렉터리에만 배포된 프라이빗 어셈블리에는 파일 이름과 다른 어셈블리 이름이 있을 수 있습니다.
참고하십시오
.NET