답변:
먼저 어셈블리 이름을 강력하게 지정할 때의 이점을 나열하겠습니다.
어셈블리 이름을 강력하게 지정하면 GAC ( 전역 어셈블리 캐시)에 어셈블리를 포함 할 수 있습니다 . 따라서 여러 응용 프로그램간에 공유 할 수 있습니다.
강력한 이름 지정은 해당 어셈블리의 고유 한 이름을 보장합니다. 따라서 다른 사람은 동일한 어셈블리 이름을 사용할 수 없습니다.
강력한 이름은 어셈블리의 버전 계보를 보호합니다. 강력한 이름은 아무도 어셈블리의 후속 버전을 생성 할 수 없도록합니다. 응용 프로그램 사용자는로드중인 어셈블리 버전이 응용 프로그램이 빌드 된 버전을 생성 한 동일한 게시자로부터 온 것인지 확인합니다.
Microsoft의 강력한 이름 지정에 대한 자세한 내용은 Strong-Named Assemblies ( MSDN )에 있습니다.
일반 조립으로 할 수없는 일은 무엇입니까?
Nuget의 부상과 함께 시작된 모든 토론에서 강력한 이름의 어셈블리를 완전히 제거 할 것을 제안했기 때문에 회사에서 시도한 결과 응용 프로그램 설정과 관련하여 동작이 크게 변경되었습니다.
VisualStudio에서 제공하는 자동 앱 또는 사용자 범위 응용 프로그램 설정 (System.Configuration.ApplicationSettingsBase 상속)을 사용하는 경우 강력한 이름의 EXE는 EXE 위치에 관계없이 "YourApplication.exe_StrongName_kjsdfzsuzdfiuzgpoisdiufzsdouif"와 같이 이름이 % LOCALAPPDATA % 내에 정확히 1 개의 디렉터리를 만듭니다. 위치.
그러나 강력한 이름이 없으면 EXE의 위치 (= path)를 사용하여 DEBUG와 RELEASE 빌드간에 이미 다른 해시 값을 생성하여 "YourApplication.exe_Url_dfg8778d6fs7g6d7f8g69sdf"와 같은 이름의 % LOCALAPPDATA % 내에 많은 디렉토리를 생성합니다. 이렇게하면 업데이트 할 때마다 설치 디렉터리가 변경되는 ClickOnce 배포에 사용할 수 없습니다.
강력한 이름 없이는 구성 파일에서 바인딩 리디렉션을 사용할 수 없다는 것을 추가하고 싶습니다.
작동하지 않습니다.
<dependentAssembly>
<assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="null" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
공개 키 토큰이 필요합니다.
<dependentAssembly>
<assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>