2016-08-12 5 views
0

지연 서명을 한 후 타사에서 완전히 서명해야하는 C# .NET 어셈블리 (name : A.exe)를 개발 중입니다. 서명을 지연시키기 위해 공개 키를 사용합니다. 어셈블리 A는 공용 라이브러리의 일부인 B.Core.dll, B.Common.dll, B.Logging.dll을 참조합니다. B 어셈블리는 지연 서명이 없으므로 ildasm/ilasm을 사용하여 디스 어셈블리하고 지연 서명 된 어셈블리를 재구성합니다. A.exe와 B.Core.dll, B.Common.dll, B.Logging.dll을 제출했는데 이제는 완전히 서명되었습니다. 그러나 A가 시작되면 오류가 발생합니다 :

파일이나 어셈블리를로드 할 수 없습니다. 어셈블리 B1 PublicKeyToken = null '

지연된 서명 된 어셈블리 (그들은 Strong Name 속성이 True로 설정되어 있음)를 참조하므로이 문제는 A.exe와 관련이 없어야하지만 범인은 B.Core입니다.
실제로 B.Core는 B.Common과 B.Logging을 참조하고 B.Common과 B.Logging은 서로 독립적입니다.
오류의 원인은 B.Core가 서명되지 않은 B.Common 어셈블리를 사용하여 처음에 만들어진 다음 세 어셈블리를 모두 분해하고 다시 어셈블하여 참조를 변경하지 않았기 때문일 수 있습니다. 문제를 해결하기 위해, 내가 생각한 것은 4 개의 어셈블리를 하나의 단일 지연 서명 어셈블리로 A의 게시 빌드 단계로 병합하는 것입니다. 작동 할 것이라고 생각하십니까?
B.Core는 .NET MEF를 사용하여 A에서 내 보낸 인터페이스를 동적으로로드한다는 점을 기억해야합니다.이 프로세스에서 문제가 발생합니까?

미리 도움을 주셔서 감사합니다.지연된 어셈블리 어셈블리 체인

+0

문제가 해결되었음을 나타내는 올바른 방법은 문제를 해결하는 대답 옆에있는 체크 표시를 선택하여 대답을 수락하는 것입니다. 응답을 직접 게시하는 데 아무런 문제가 없습니다. (수락하기 전에 시간이 지체 되더라도) 간단한 규칙은 질문이 질문에 속하고 대답이 대답에 속한다는 것입니다. 나는 당신이 당신의 질문의 맨 아래에서 대답을 추출하고, 대답 *을 게시하고, 정당한 때에 그것을 받아 들일 것을 제안합니다. –

+0

고마워, 나는 너의 제안을 따랐다. – peval27

답변

0

해결책을 찾았습니다. ILMerge를 사용하여 네 개의 어셈블리를 하나로 병합 했으므로 모든 것이 예상대로 작동했습니다. 디버그 기호조차도 하나의 PDB 파일에 "병합"되었습니다 (트릭은 각 어셈블리의 동일한 폴더에 B.Core.pdb, B.Common.pdb 및 B.Logging.pdb가 있어야 함).

MEF는 불평하지 않고 작업을 수행했습니다.