2016-08-26 2 views
0

내 솔루션에는 여러 클래스 라이브러리 프로젝트 (.dll)를 사용하는 콘솔 응용 프로그램 (.exe) 프로젝트가 있습니다. 클래스 라이브러리 프로젝트에는 콘솔 응용 프로그램에 대한 참조가 있습니다. 콘솔 응용 프로그램은 런타임 중에 클래스 라이브러리 프로젝트를로드합니다. (.exe 인은 같은 디렉토리로로드에서 DLL의의를 검색합니다.)프로젝트를 실행해도 다른 (참조되지 않은) 프로젝트가 생성되지 않습니다

_________________ 
|     | <-- library1.dll 
| application.exe | <-- library2.dll 
|_________________| <-- library3.dll 

내가 솔루션을 청소하고 또는 디버그이, 비주얼 스튜디오는 해당 콘솔 프로젝트를 (빌드 시작을 명중 합니다. exe) 시작 프로젝트입니다. 그러나 콘솔 응용 프로그램은 라이브러리를 참조하지 않으므로 라이브러리 프로젝트 (.dll)를 빌드하지 않습니다.

라이브러리 프로젝트에서 직접 또는 전체 솔루션에서 빌드을 누르는 경우 .dll 파일을 가져옵니다. 그러나 이것은 내가 잊어 버릴 수있는 행동이므로 .dll 파일이없는 응용 프로그램이나 .dll 파일의 이전 빌드로 끝날 수도 있습니다.

콘솔 응용 프로그램을 실행하거나 빌드 할 때 VS2015가 모든 프로젝트를 빌드하게하고 싶습니다. 이미 시도 :

=> 콘솔 응용 프로그램에서 DLL로 참조를 작성했지만 실패하면 순환 참조가 발생합니다.

=> 콘솔 응용 프로그램 프로젝트에 빌드 종속성을 추가하고 라이브러리 프로젝트도 빌드합니다. 그러나 Visual Studio에서 언급 한 것처럼 순환 참조도 가능하기 때문에 불가능합니다.

=> 솔루션의 모든 프로젝트를 시작 프로젝트로 만듭니다. 이 실제로 작품 VS2015로 모든 프로젝트를 빌드하고 .exe 파일을 만듭니다. 하지만 그러면 콘솔 응용 프로그램이 시작 응용 프로그램이 될 수 없다는 것을 알리는 응용 프로그램을 실행할 때마다 성가신 팝업이 나타납니다.

=> 다른 라이브러리가 참조해야하는 항목을 보유하는 다른 라이브러리 프로젝트 (connect.dll)를 만들어 콘솔 응용 프로그램을 분할합니다. 그리고 나서 모든 프로젝트는 common.dll을 참조하고 콘솔 어플리케이션은 마침내 콘솔 라이브러리를 참조 할 수 있습니다. 이것은 또한 , 작동하지만은 추가 프로젝트를 잎 :

_____________      _________________ 
|    | <------------------- |     | 
|    | <-- library1.dll <-- |     | 
| connect.dll | <-- library2.dll <-- | application.exe | 
|    | <-- library3.dll <-- |     | 
|_____________|      |_________________| 

도 참조되지 않은 프로젝트를 VS2015 빌드를 만들 수있는 더 나은 방법이 있나요, 추가하지 않고, 콘솔 응용 프로그램 프로젝트를 빌드 할 때 완전히 새로운 프로젝트?

답변

0

왜 클래스 라이브러리에 실행 파일에 대한 참조가 필요합니까? 일반적으로 실행 파일은 클래스 라이브러리를 참조합니다 (런타임에 클래스 라이브러리를로드한다는 사실로 판단해야 함). 다른 방법은 아닙니다.

실행 파일에 따라 클래스 라이브러리를 유지해야합니다. 그들은 해야합니다, 그것은 당신이 아마 라이브러리에 속한 실행 파일에 물건을 의미합니다. 라이브러리로 이동하거나 모두을 같은 프로젝트로 이동하십시오.

편집 : 응용 프로그램이 라이브러리에서 구현 된 클래스의 인터페이스를 포함하고 모든로드 된 라이브러리를 추적 : 귀하의 코멘트 귀하의 질문에 대답 할 수 있지만

에 비추어.

귀하의 질문에 설명 된 마지막 시나리오는 올바른 설정처럼 보입니다. 인터페이스를 자신의 프로젝트로 이동하면 각 클래스 라이브러리 (실행 파일은 물론)가 인터페이스 프로젝트를 참조합니다. 클래스 라이브러리가 정말에만 존재하는 실행 파일 (전용 인터페이스 부분) 바로 실행이 시작하는 두 부분이 있었다 제안의 부분에 의존한다는 사실 -

개념적으로는, 이것은 추가 프로젝트 아니다 . 그것이 순환 의존성이 나오는 곳입니다.

+0

작성한 내용은 답변이 아닙니다. 그러나 귀하의 질문에 대답하기 위해 : 응용 프로그램은 라이브러리에 구현 된 클래스의 인터페이스를 포함하고로드 된 모든 라이브러리를 추적합니다. 라이브러리가 응용 프로그램을 참조하기 때문에 라이브러리는 이제 서로의 코드를 호출합니다. 그리고 dll을 이런 식으로 사용함으로써, 나는 dll 파일을 추가/제거함으로써 간단하게 라이브러리를 꺼내거나 연결할 수 있습니다. –

관련 문제