일부 타사 어셈블리를 포함하여 ILMerge를 사용하여 여러 .NET 어셈블리를 병합합니다. 그렇게함으로써 타입 정의가 정의 된 어셈블리에 묶여 있다는 사실에 몇 가지 오류가 발생했습니다.병합 된 어셈블리 (ILMerge)의 .NET 형식 정의
간단한 예제는 내 App.config의 log4net 구성 섹션 정의입니다. log4net 어셈블리는 일단 병합 된 어셈블리에 병합되면 존재하지 않으므로 type = "log4net.Config.Log4NetConfigurationSectionHandler, log4net"을 사용합니다. 큰 문제는 아니지만 어셈블리 이름을 병합 된 어셈블리로 변경하면 제대로 작동합니다.
약간 더 복잡한 예제는 이진 직렬화 형식입니다. 우리 시스템은 바이너리 직렬화를 사용하여 프로세스간에 특정 객체를 보냅니다. 모든 직렬화 가능 객체는 다른 모든 프로젝트가 참조하는 공통 어셈블리에 정의됩니다. 기본 이진 직렬화를 사용하고 있었지만 개체 직렬화 된 병합 된 어셈블리를 찾을 수 없다는 오류가있는 개체를 deserialize 할 때 실패하기 시작했습니다. 다시 한번 말하지만 큰 문제는 아니며 주어진로드 된 어셈블리에서 유형을 찾는 사용자 정의 SerializationBinder를 구현했습니다.
이전 예에서는 직렬화 된 형식 참조가 다른 직렬화 가능 형식 일 때 더욱 복잡해졌습니다. 나는 점점 더 다루기 어려워지는 점점 더 많은 문제들에 계속해서 뛰어 들었다.
여기에서 얻으려고하는 점은 .NET 유형 시스템과 ILMerge가 잘 작동하지 않는 것입니다. 누구든지이 문제를 어떻게 해결했는지에 대한 경험이 있습니까? .NET 런타임에서 유형이 무엇이라고 말하는지 상관하지 않는다고 말할 수 있습니까? 어디서나 찾을 수 있습니까?
참고 : 어셈블리를 병합하는 이유를 묻는 질문에 답하지 마십시오.이 질문의 요지는 아닙니다. 문자열의 위험 및 코드에서 (물리적 위치) 문자열에
WAG : 아직 DataContractSerializer를 사용해 보셨습니까? NetDataContractSerializer가 유형에 바인딩되어 있기 때문에이를 사용할 수 없지만 보통의 오래된 DCS가 당신을 위해 작동해야합니다 ... – Will