0

Windows 서비스가 C#으로 작성되었습니다. 동적으로 C# 코드를 생성하여 abc.dll, xyz.dll 등으로 어셈블리에 컴파일합니다. 이러한 어셈블리는 나중에 실행을 위해로드됩니다. 컴파일 할 때 System.CodeDom.Compiler.CompilerParameters 클래스의 컴파일러 옵션 중 하나로/keyfile : mykeyfile.snk를 전달합니다. 이제 문제가 발생했습니다 : 강력한 이름 유효성 검사가 실패하여 일부 어셈블리를로드 할 수 없습니다.CompileAssemblyFromSource 테스트 어셈블리에 서명합니다.

나는 테스트 시스템에서 생성 된 어셈블리를 얻었고 sn, exe로 체크했을 때 약 6 개의 어셈블리 중 하나가 지연되거나 테스트 된 것을 볼 수있다. sn.exe -v xyz.dll을 실행하면 xyz.dll은 지연 서명 또는 시험 서명 된 어셈블리. 분명히로드 할 수 없게됩니다.

일부 어셈블리가 제대로 서명되지 않은 이유는 무엇입니까?

+0

도움이 될지 모르지만 컴파일러 출력을 로그에 남기려고 했습니까? 어쩌면 문제의 왕이 있을지도 모릅니다. –

답변

0

을 난 내가 공유,이를 해결 할 수 있었다 모든 사람의 이익을 위해. 문제의 원인은 컴파일이 2 단계 프로세스라는 것입니다. 컴파일러는 먼저 dll을 생성 한 다음 서명을 시도합니다. http://msdn.microsoft.com/en-us/library/yh7ks237(v=vs.90).aspx

dll은 여전히 ​​존재하며로드가 시도 될 때까지 테스트에 서명 한 것을 알지 못합니다. 다른 스레드에서 잠긴 1 개의 서명 파일 xyz.snk가 있습니다.