2011-12-19 4 views
5

저는 프로젝트에서 작업 해 왔으며 함께 성장할 수없는 두 부분이 상호 의존적이라는 것을 알고 있습니다.csc.exe와 상호 종속 어셈블리

이 두 부분을 a.exe 및 b.dll이라고합시다. b.dll은 a.exe가 데이터를 검색 할 수있는 구현을 제공하지만, 다른 독립 실행 형 프로그램과 통신 할 수 있도록 쉽게 변경 될 수 있도록 자체 독립 실행 형 어셈블리를 원합니다.

그러나 a.exe에서 b.dll을 참조해야하지만 b.dll에는 a.exe에서 분리 할 수없는 여러 기능이 필요합니다.

필자는이 프로젝트를 작성하면서 테스트 중이므로 a.exe와 b.dll이 모두 존재하며 a.exe와 a.exe에 대해 b.dll을 컴파일 할 수 있습니다. b.dll에 대해,하지만 어떻게 소스에서 이들 모두를 재건 할 수 있습니까?

+0

Visual Studio에서 순환 종속성 오류를 얻지 못했습니다. – Oded

+0

@Oded 그는 명령 행 편집을 사용하고 있습니다. 반복적으로이를 빌드하고 순환 종속성을 만들 수 있습니다.하지만 매우 어렵지 않게 깨끗한 재 구축을 할 수 있습니다. –

+0

@ReedCopsey - 그가 그럴 것이라고 생각했지만 OP로부터 확인을 원했습니다. 당신이 말했듯이,이 시나리오에서는 깨끗한 빌드가 불가능합니다. – Oded

답변

2

호출의에는 Csc.exe를 참조 a.exe를하고 B.DLL의 소스를 컴파일 할 필요 부품을 포함해야 a.exe에 csc.exe, co를 호출합니다. b.dll의 소스를 b.dll로 복사하고 a.exe를 참조한 다음 csc.exe를 마지막으로 호출하여 a.exe의 소스를 a.exe로 컴파일하고 b.dll을 참조하십시오.

4

일반적으로이 작업을 리팩토링하고 공유 종속성을 자체 어셈블리 (c.dll)로 옮기는 것이 좋습니다. 이 방법은 a.exe와 b.dll 모두 c.dll을 참조 할 수 있으므로이 순환 종속성을 피할 수 있습니다.

+0

만약 내가이 상황에서, 나는 상상할 수 있습니다. 그 c.dll은 a.exe와 b.dll에 의존합니다. 이 기능은 b.dll 및 a.exe의 코드와 제대로 구분되지 않습니다. –

+1

@RobertAllanHenniganLeahy 귀하의 목표는 이것을 분리하는 것입니다. 분리되도록 API를 설계하십시오. 유형들이 모두 상호 의존적이어야한다는 이유는 없습니다. a.exe 또는 b.dll이 functionalitiy를 제공하거나 위임자 등을 사용하여 구현하는 c.dll의 인터페이스를 항상 정의 할 수 있습니다. 이와 같은 순환 종속성은 항상 주위에서 작동 할 수 있습니다 ... –

+0

특히 피할 수있는 방법이 잠재적으로 복잡성과 크기를 증가시키고 잠재적으로 성능을 저하시킬 때 특히 피하기 위해 상호 종속성을 피할 필요가 있습니다. 나는이 문제를 지나서 쉬운 방법을 생각했다. csc를 호출하자.exe, a.exe 및 b.dll의 소스를 a.exe로 컴파일하고, csc.exe를 호출하고, b.dll의 소스를 b.dll로 컴파일하고, a.exe를 참조한 다음 csc.exe를 마지막으로 호출합니다. a.exe에 대한 소스를 a.exe로 컴파일하고 b.dll을 참조하십시오. –

5

나는 세 가지 어셈블리에 시스템을 리팩토링 것 :

  • a.exe를 - 홈페이지 EXE 아무것도이
  • B.DLL을 참조하지합니다 - 당신은 오늘이 있지만 a.exe를 참조하지 않기 때문에, 이 c.dll을
  • c.dll을을 참조 - 이것은 일반적인 조각/A와 B 모두,
+0

b.dll에는 하나의 클래스 만 포함되어 있습니다. DataSource라고하고, a.exe에는 클래스 라이브러리가 있지만, b.dll에 필요한 것은 a.exe의 기본 구성 요소 인 Server라는 클래스입니다. . –