강력한 이름의 어셈블리를 사용하는 이유는 무엇입니까?
강력한 명명 된 어셈블리를 사용하면 어떤 이점이 있습니까?
일반 조립으로 할 수없는 일은 무엇입니까?
먼저 어셈블리 이름을 강력하게 지정할 때의 이점을 나열하겠습니다.
어셈블리 이름을 강력하게 지정하면 어셈블리를 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>
예 : 보안에 더 중점을두고 답변을 드리고 싶습니다 . 제 3 자에게 재사용하고 싶지는 않지만 테스트 가능하기를 원하는 소스 코드로 어셈블리를 생성하는 경우 어셈블리에 강력하게 서명하고 해당 어셈블리에 대해서만 내부를 표시 할 수 있습니다. 같은 서명.
참고 URL : https://stackoverflow.com/questions/2354129/why-use-strong-named-assemblies
'Programing' 카테고리의 다른 글
Tmux 대 iTerm2 분할 창 (0) | 2020.08.17 |
---|---|
SELECT… FOR UPDATE를 언제 사용합니까? (0) | 2020.08.17 |
새 서비스를위한 기본 TCP / IP 포트를 어떻게 선택해야합니까? (0) | 2020.08.17 |
커밋 메시지는 현재 또는 과거 시제로 작성해야합니까? (0) | 2020.08.17 |
Visual Studio에서 사용할 새 언어를 만드는 방법 (0) | 2020.08.17 |