2009-12-30 3 views
0

내 Visual Studio 솔루션에는 런타임에 다른 프로젝트에 의해로드되는 여러 런타임 프로젝트 (dll)가 있습니다. 로드 된 dll은 일부 런타임 조건에 따라 다릅니다.형식을 가져 오지 않고 참조 추가

런타임에 DLL을로드하려면 응용 프로그램 bin 디렉토리에 있어야합니다. 그 중 몇 가지 응용 프로그램이 있습니다. 이를 위해 필 요한 dll을 필요한 모든 응용 프로그램에 복사하는 사후 빌드 스크립트를 실행합니다. 나는 그것이 정말로 필요하지 않은 무거운 xcopy 포스트 빌드 프로세스를 생성하기 때문에 스크립트를 제거하고 싶습니다.

이 경우 무엇을 사용합니까?

또한 모든 응용 프로그램에서 dll에 대한 참조를 추가 할 수 있지만이 경우 유형 참조를 만들고 I (또는 다른 개발자)가 실수로 지연 바인딩 된 dll에서 클라이언트의 섬기는 사람.

답변

1

이전에도이 문제를 다루었지만 매우 실망 스럽습니다. 지금 취하는 접근법은 디렉토리 종속성을 제거하는 것입니다. 이러한 후기 바인딩 라이브러리의 위치를 ​​구성 파일에 외부화 한 다음 라이브러리의 빌드 출력을 설정하는 공유 위치에 유지하십시오.

배포와 관련하여 해당 설정을 변경하고 설치 프로그램과 함께 라이브러리를 패키지화합니다.

이 기능은 라이브러리의 단일 복사본 만 추적하면되므로 여러 독립형 응용 프로그램을 개발/디버깅 할 때 특히 유용합니다.

이것은 당신을위한 선택 사항이 아닙니다. 아마도 앱을 외면화하기가 너무 어렵거나 또는 한 앱에서 다음 앱으로의 종속성에 큰 차이가있을 수 있습니다. 그러면 nobugz의 대답으로 갈 것입니다.

0

지연된 모든 프로젝트의 빌드 출력을 변경하여 런타임에 바인딩하려는 프로젝트에서 직접 빌드하십시오. 따라서 직접/bin/debug /에 빌드하는 대신 ../MyMainApp/bin/Debug/로 빌드하십시오.

+0

감사합니다. Sly. 빌드 출력이 이미 리디렉션되었습니다. 문제는 솔루션에 여러 독립 응용 프로그램이 포함되어 있으므로 dll을 여러 폴더에 복사해야한다는 것입니다. 나는 또한 모든 후기 바인딩 된 DLL에 대한 공유 상위 폴더에 대해 생각하고 있습니다. –

+0

우리는 비슷한 상황을 해결하기 위해 모든 프로젝트를 동일한 디렉토리 (c : \ OurProductName)에 빌드합니다. 그래서 그 폴더에는 우리가 가지고있는 모든 DLL과 모든 어플리케이션 (EXEs)이 들어 있습니다. – Sylvain

1

클라이언트 프로젝트로 복사하기 위해 참조 어셈블리를 만들 필요는 없습니다. 프로젝트 + 기존 항목 추가에서 DLL을 선택하십시오. Build Action을 "None"으로 설정하고, Output으로 복사하여 "Copy if newer"로 설정하십시오.

+0

nobugz : 클라이언트 프로젝트에서 DLL에 대한 참조가있는 경우에만 자동으로 수행됩니다. 그는 레퍼런스를 추가하지 않을 것이라고 썼다. (그의 마지막 코멘트 참조). – Sylvain

관련 문제