2017-12-04 5 views
0

폴더에 어셈블리 .dll이 있습니다. 프로젝트를 열고 해당 파일에 대한 참조를 추가합니다.Visual Studio 2017에서 참조가 후드 아래에서 변경됨

등등, Visual Studio는 출력 폴더 (Debug/Release/Whatever)에 해당 dll을 복사하고, 그곳을 가리 키도록 참조를 변경하고 ... 원래 경로로 prj 파일을 유지합니다.

결과 : 하나, 일부, 모든 dll을 업데이트합니다. Visual Studio는 로컬 dll 만 사용하면되므로 걱정할 필요가 없습니다. 그리고 마술에 추가하기 위해, 만약 내가 Rebuild (Clean과 Build를하는)를하면, 참조가 더 이상 유효하지 않습니다. 왜냐하면 Clean은 복사 된 파일을 제거했기 때문입니다.

왜 이런 방식으로 작동합니까?

+0

다른 VS 프로젝트의 출력 인 구성 요소를 참조하는 경우 생성 된 출력이 아닌 프로젝트를 참조하는 것이 좋습니다. 어쨌든 "참조 로컬"복사를 해제하면 (VS의 "속성"참조) VS가 dll을 프로젝트 출력 폴더로 복사하지 않도록 지시 할 수 있습니다. – Filburt

+0

다른 프로젝트를 참조하는 것은 항상 최악의 방법입니다. 전체 회사가 네트워크 및 코드 버전 시스템을 구성하여 모든 사람이 모든 것을 볼 수 있도록하고 강제로 Visual Studio에서 수십 개 또는 수백 개의 프로젝트를로드해야합니다. 필요 없으며 PC에 부담을줍니다. 소프트웨어를 실행할 때 dll을 찾지 못하기 때문에 로컬 복사 옵션이 작동하지 않습니다. Visual Studio는 원본 소스에서 로컬을 복사하고 해당 원본에 대한 참조를 유지하면서 로컬을 한 번 복사하고 내부적으로 참조를 변경하는 대신 로컬로 복사를 유지해야합니다. – motoDrizzt

+0

둘째로, VS를 강제로 * 모든 빌드에서 * 끌어 오도록 강요하는 옵션을 놓치고있는 것 같습니다. 그러나 프로젝트를 실행할 때마다 VS에서 참조를 끌어 오도록 지시 할 방법이 없습니다. – Filburt

답변

1

좋아, 내가 무작위로 대답을 발견, 그건 나쁜 설정 이름의 문제.

우선 Visual Studio에는 "로컬 복사"옵션이 있습니다.이 설정을 "아니요"로 설정하면 트릭을 수행 할 수 있지만 실제로 작동하지 않습니다 (사용자가 시도한 후에는 분명합니다). 출력 폴더에 dll을 복사하지 않으면 소프트웨어를 실행해도 찾지 못합니다 (GAC에서 어셈블리에 대해 이야기하지 않는 한 다른 이야기입니다).

그 자체로 문제는 Visual Studio가 원본 원본에서 로컬을 복사하고 해당 원본에 대한 참조를 유지해야하며 대신 출력 폴더에 한 번만 복사하고 그 순간부터 출력 폴더에 대한 참조를 내부적으로 변경해야한다는 것입니다. 여전히 prj 파일에 원본 참조를 유지하지만 무시하면 (프로젝트 나 솔루션을 정리하면 더 이상 dll이없고 더 이상 컴파일되지 않으므로 더 이상 컴파일되지 않습니다.)

해결책은 무엇입니까? "특정 버전"이라는 레이블이 붙은 설정입니다. 그것의 이름에도 불구하고 당신이 참조한 DLL의 특정 버전의 사용을 강요하지는 않습니다. 단지 Visual Studio (Copy Local = Yes와 결합 됨)에 "Copy Always"와 동등합니다.

관련 문제