2014-01-08 2 views
14

제목이 명확하지 않아서 죄송합니다.Visual Studio는 전이 참조를 최적화합니까?

Visual Studio (2010)에서 이상한 동작이 발생했습니다. 로컬 복사 진정한로 구성되어 모두 A, B와 C

A has a reference on B 

B has a reference on C 

C has a reference on an assembly (log4net.dll) 

:

내가 내 솔루션의 세 가지 프로젝트를 가지고 있다고 할 수 있습니다.

나는 프로젝트 A에 대한 책임이있어 다른 두 개발자는 클래스 중 하나의 프로젝트 C에있는 여러 (정적) 방법을 사용한다 프로젝트 B와 C

프로젝트 B에 대한 책임이 있습니다. 난 C에서 아무것도 사용하지 않는 B의 다른 클래스를 사용하고 있습니다.

솔루션을 빌드했을 때 (프로젝트 A가 기본 프로젝트로 구성되었을 때) 나는 C와 그 참조 된 어셈블리의 결과를 실제로 어떤 일이 일어 났는가? C의 결과는 B의 출력 폴더에 복사되었지만 A의 출력 폴더에는 없었습니다.

이 문제의 원인은 A가 C에서 직접 또는 간접적으로 아무 것도 사용하지 않았다는 것입니다.

질문 : Visual Studio의 최적화 기능에 내장되어 있습니까? 아니면 내가 잘못하고 있습니까?

+0

예, MSBuild는이를 수행하는 방법을 확실히 알고 있습니다. 많은 프로그래머가 10 개 이상의 프로젝트가 포함 된 솔루션을 제공하지만 그 기능이 작동하지 않으면 오히려 비참하게 작동합니다. 귀하의 질문에있는 정보가 잘못된 것이 무엇인지 알려주지 않으므로 MSBuild의 자세한 정보를 "진단"으로 변경하여 자세한 추적 정보를 얻으십시오. 이 프로젝트들을 함께 모으기 시작한 이래로, 실제로는 * 참조를 사용하는 것이 간단한 설명이 아닙니다. –

+0

@HansPassant : 많은 프로그래머가 10 개 이상의 프로젝트로 구성된 솔루션을 가지고 있지만, 그 중 하나가 명시 적 참조 체인에서 다른 모든 프로젝트를 참조한다는 것을 자동으로 의미하지는 않습니다. –

+0

그건 정확히 요점입니다. 이러한 사슬이 존재한다면 그것은 쉽습니다. 실제 사슬에서는 거의 불가능합니다. 그러나 모든 것은 여전히 ​​올바르게 복사됩니다. –

답변

2

예, 기능입니다. 참조 된 어셈블리의 형식을 사용하지 않으면 복사되지 않습니다.

+2

해결책은 모든 프로젝트가 동일한 폴더를 사용하도록 프로젝트 속성을 변경할 수 있습니다. – Richard

+0

안녕하세요, 감사합니다. 그것에 대한 참고가 있습니까? 이 동작을 비활성화 할 수 있습니까? – Michael

+2

@Michael http://blog.alexyakunin.com/2009/09/making-msbuild-visual-studio-to.html –

관련 문제