2012-05-03 3 views
1

몇 가지 프로젝트 (모든 클래스 라이브러리)로 구성된 솔루션이 있습니다. A, B, C, D, E.ILmerge 및 어셈블리 참조

A, B 및 C는 핵심 기능을 제공하므로 함께 배포해야합니다. D 및 E는 모든 상황에서 반드시 필요한 것은 아닌 일부 어댑터를 제공합니다.

따라서 배포하기 전에 당연히 A, B 및 C를 하나의 어셈블리 (ABC)로 통합하려고합니다.

프로젝트가 컴파일 될 때 D와 E는 ABC가 아니라 A, B 및/또는 C를 참조합니다. 그래서 나중에 다른 프로젝트에서 ABC, D 및 E를 참조하려고하면 컴파일 오류가 발생합니다. "인스턴스 인수 : 'A.IBoo'에서 'A.IBoo'로 변환 할 수 없습니다. VS에서는 어셈블리 서명 (이름)이 다른 것을 볼 수 있습니다.

이 문제를 해결하는 좋은 방법이 있습니까?

게시자 정책을 사용할 수는 있지만 꽤 좋지는 않습니다.

또한 원래 솔루션으로 프로젝트를 결합 할 수 있으며 ILmerge 사용을 피할 수 있지만 그렇지 않을 것을 알고 있습니다.

답변

2

비슷한 문제가 발생했습니다. 두 번 참조 된 형식이 있다고 밝혀졌습니다. 결합 된 어셈블리에 한 번, 별도 프로젝트에 한 번. 그것은 지옥으로 좌절했습니다.

프로젝트를 제거하고 결합 된 어셈블리 만 참조하여 라이브러리처럼 처리하거나 프로젝트를 빌드 후 작업에서 결합 할 수 있습니다.

또 다른 가능성은 전역 네임 스페이스 (http://msdn.microsoft.com/en-us/library/c3ay4x3d(v=vs.80).aspx)의 별명을 지정하고 결합 된 어셈블리를 참조하는 것입니다. 단점은 어댑터에서 항상 뒤떨어져 있다는 것입니다.

실제 프로젝트를 보지 않고도 다음과 같이 할 수 있습니다. ABC 프로젝트를 분리하여 자체 솔루션에 넣을 수 있습니다. 포스트 빌드 이벤트를 사용하면 ILMerge를 실행할 수 있습니다. 버전이 지정되고 강력한 이름인지 확인하십시오. 그것은 두통을 길 아래로 저장합니다.

프로젝트 D와 E는 ABC 결합 어셈블리에 대한 참조와 함께 해결책이 될 것입니다.

코드와 종속성을 보지 않고도 말하기 어렵습니다. 또한 변경 빈도에 따라 다릅니다. 내가 두 가지 해결책을 가진 DE를 수용하기 위해 ABC를 변경한다면 정말 빨라질 것입니다.

+0

몇 가지 옵션을 제공해 주셔서 감사합니다. 나는 당신의 경우와 마찬가지로 내부 및 외부 참조를 얻었습니다. 사실, 내가 말하는 프로젝트는 다음과 같습니다. https://github.com/Kostassoid/Anodyne, build.cmd는 지금까지 내가하고있는 일을 '설명'할 수 있습니다. 해결책을 나누는 것은 아마도 가장 좋은 생각 일 수 있지만 젊은 프로젝트이므로 모든 부분에서 자주 작업해야합니다. – Kostassoid