0

저는 ProjA와 ProjB라는 프로젝트가 2 개있는 솔루션을 가지고 있습니다. ProjA는 응용 프로그램이며 ProjB는 라이브러리입니다. 또한 ProjB는 3 개의 다른 DLL 파일 (C, D, E)을 참조합니다. ProjB C, D 및 E를 빌드하면 모두 bin 디렉토리로 이동합니다. ProjA 만 컴파일하면 C와 D 만 복사되고 E.는 복사되지 않습니다.DLL 파일은 한 프로젝트의 bin 디렉토리에 복사되지만 다른 디렉토리에는 복사되지 않습니까?

정말 어떤 일이 일어날 지 잘 모르겠습니다. 나는 참조 속성을 보았고 모든 3 (C, D, E)는 동일했다 (이름과 경로 제외). ProjB가 bin 디렉토리에 E를 배치하는 이유를 모르지만 내 응용 프로그램 (ProjA)이 빌드 할 때 E를 로컬로 복사하지 않습니다.

+0

여기에 vb/csproj를 게시 할 수 있습니까? – Mrchief

답변

1

여기서는 사지에 나가서 추측을하게 될 것입니다. 참조 E는 프로젝트 B에서 직접 사용되지 않으므로 참조는 프로젝트 B의 출력의 PE 목록에 표시되지 않습니다.

당신은 당신 것 프로젝트 B의 DLL을 열 수 있다면 이러한 어셈블리는,

그러나 프로젝트 B의 bin 폴더에 복사 이유를 설명하는 프로젝트 B의 참조의 "로컬 복사"를 가질 가능성 참조 E는 어셈블리 종속성으로 나열되지 않습니다. 비주얼 스튜디오/MSBuild에서 프로젝트 & B를 가지고 조립 B의 프로젝트 A의 사용이 문제를 해결

또는 프로젝트 B에 참조 E의 클래스 또는 기능을 사용하려면

E.

필요하다는 것을 추론 할 수 어셈블리를 공통 폴더로 출력합니다. 팁 : 빌드 성능을 향상 시키려면이 시나리오에서 "로컬 복사"를 해제하십시오.


업데이트 : 나는 당신의 문제지만있어 가장 가까운이 post which suggests that it may be a path probing problem 출신를 재현하는 여러 가지 방법을 시도했습니다

. 제공된 예에서 A에서 B까지의 참조는 정적 파일 참조 (bin \ Debug \ ProjB.dll)이며 종속성 (E)은 Copy Local = False로 정의됩니다. 샘플 프로젝트는 모든 의존성이 컴파일되고 압축 된 방식으로 설정됩니다.

A를 컴파일하면 설명한 문제가 눈에.니다. 수정 프로그램은 ProjB의 E 참조를 "Copy Local = True"로 변경해야합니다.하지만이 변경을 수행하고 다시 컴파일하면 차이가 없습니다! 왜?

마치 "로컬 복사"설정을 변경해도 ProjB의 출력이 실제로 변경되지 않는 것처럼 보입니다. 그리고 ProjB의 참조는 정적 참조이기 때문에 변경 사항이 발생했는지 여부를 결정하지 않습니다. 빌드를 정상적으로 컴파일하는 Clean을 수행 할 때까지는 아닙니다.

도움이 될지 모르겠다. 그렇지 않으면, 행운을 빌어 요.

+0

사실 저는 프로젝트 B에서 E를 많이 사용합니다. 이는 복사가 아니라는 것을 알게되었습니다. 라이브러리는 ProjB의 bin에있는 반면 ProjA의 bin에 복사되지 않기 때문에 런타임 오류가 발생합니다. –

+0

흥미 롭습니다! 런타임 오류가 예상했지만 내 가정 C 또는 D 필요 E,하지만 E 형식은 명시 적으로 B, 따라서 직접 IL 참조를 사용하지 않았습니다. 이 문제를 재현하고 싶습니다. 참조에 대한 자세한 내용을 공유 할 수 있습니까? – bryanbcook

+0

글쎄, 곧 뭔가를 시험해 보겠다. 비슷한 프로젝트 셋업 (신선하고 깨끗한)으로 새로운 솔루션을 만들어서 어떤 일이 일어나는지 살펴볼 것이다. 나는 그것이 E.와 함께 계속되는 펑키일지도 모른다는 느낌이 들었다. –

관련 문제