답변:
이전 저자가 왜 이런 방식으로 어셈블리에 서명했을까요?
그는 모든 어셈블리에 동일한 키로 서명하기를 원했을 수도 있습니다.
어셈블리에 서명해야하는데 서명하지 않으면 무엇이 잘못됩니까?
필요하지는 않지만 어셈블리의 진위를 보장 할 수있는 메커니즘입니다. 이를 통해 어셈블리가 변경되지 않았으며이 작성자의 어셈블리인지 확인할 수 있습니다. GAC에 넣으려는 경우에도 필요합니다.
어셈블리 서명에 어떤 단점이 있습니까? 지연이 발생합니까?
서명 된 어셈블리는 다른 서명 된 어셈블리 만로드 할 수 있습니다. 또한 특정 버전과 연결되어 있으므로 다른 버전을 사용하려는 경우 바인딩 리디렉션을 사용하거나 응용 프로그램을 다시 컴파일해야합니다. 서명 확인으로 인해 약간의 성능 오버 헤드가 있지만 걱정할 필요가 없습니다.
어셈블리를 GAC 에 넣으려면 어셈블리에 서명해야합니다 .
실행 파일에 서명하면 연결되는 클래스 라이브러리도 서명해야합니다. 당신이 (당신이 사용해야 특히 타사 라이브러리를 사용하는 경우이 어려울 수 있습니다 액티브 X 컨트롤 또는 유사한).
Richard Grimes는 .NET의 보안에 대한 훌륭한 워크샵을 작성했으며 여기에는 다음과 같은 장이 포함되어 있습니다. 보안 워크샵
모든 어셈블리가 동일한 .snk 파일로 서명 된 이유는 코드 범위를 가진 단위 테스트를 사용한 경우 일 수 있습니다. 코드 커버리지를 수행하려면 (적어도 Visual Studio 2005의 테스트 버전에 내장 된 도구를 사용하여) 어셈블리에 서명 한 경우 서명에 사용되는 .snk 파일을 지정해야하지만 전체 솔루션에 대해 하나의 .snk 파일을 지정하십시오. 다른 .snk 파일로 다양한 클래스 라이브러리에 서명하면 한 번에 하나의 코드 범위 만 확인할 수 있습니다.
dll 서명에 대한 모든 사용법에도 불구하고 dll은 두 가지 이유로 만 서명되어야합니다.
1. 버전 관리
2. 인증
ㅏ. 버전 관리는 dll이 빌드 된 버전을 나타내며 GAC에 푸시하는 동안 동일한 이름의 두 dll이 존재할 수 있지만 다른 버전이 있습니다.
비. 인증은 dll이 변조되지 않았는지 여부를 나타내며 생성시 동일하게 존재합니다.