프로그래밍 방식으로 DLL을로드하고 코드를 실행해야하는 프로젝트가 있습니다. DLL과 그 의존성은 데이터베이스에 저장되고 디스크에 기록되지만, DLL을 다시 작성하기 전에 DLL이 이미 있는지 확인하려고합니다. 현재 데이터베이스에는 파일의 강력한 어셈블리 이름과 이진 데이터 및 버전 번호가 들어 있습니다. 어셈블리의 공개 키를 DLL 디렉토리에있는 기존 파일의 키와 대조하여 저장해야한다고 생각합니다.강력한 어셈블리 이름과 키 파일을 사용하여로드중인 DLL이 예상 한 것임을 확인하는 방법은 무엇입니까?
AssemblyName.GetPublicKey()를 사용하여 어셈블리의 공개 키를 가져올 수 있다는 것을 알고 있습니다. 데이터베이스의 파일 공개 키도 저장해야합니까? 코드에 공개 키가 없으면 어셈블리가 어떻게 검증됩니까? 필자가 찾은 모든 코드 예제는 공개 키를 가져 오거나 강력한 이름이 있는지 확인하는 것으로 나타납니다.
지금 당장은 핵심 라이브러리 인 라이브러리 관리 클래스에 대해 설명하고 있습니다. 시작시 dll 디렉토리를 확인하고 각 파일의 공개 키를 사전에 추가합니다. 그런 다음 어셈블리가 이미 디스크에 있는지 확인해야 할 때 사전을 확인할 수 있습니다 (하지만 데이터베이스에 공개 키를 저장해야합니다). 또한 FileSystemWatcher를 사용하여 라이브러리의 모든 변경 사항을 모니터링합니다. 업데이트 된 어셈블리를 작성해야한다면 디스크에있는 어셈블리를 덮어 쓰고 클래스는 사전을 업데이트합니다.
강력한 이름의 어셈블리에 저장된 해시 값을 다시 사용하여 두 파일을 비교하려고합니까? –
@ 스페 넌, 제 질문 이군요, 그렇습니까? 다른 방법이 있습니까? – scottm