우리는 여러 하위 프로젝트 (약 20 개)로 구성된 .NET 프로젝트를 보유하고 있습니다. 솔루션마다 몇 가지 솔루션이 있으며 각 솔루션에는 특정 솔루션과 관련된 하위 프로젝트 만 포함됩니다.VS에서 프로젝트 참조가 아닌 dll 참조로 .NET 어셈블리 종속성 관리
임의의 솔루션을 허용하기 위해 우리의 하위 프로젝트는 프로젝트 참조를 통해 서로를 참조하지 않고 직접 dll 참조를 통해 참조합니다. csproj 파일을 미세 조정하여 HintPath가 $ (Configuration)을 포함하도록합니다. Debug는 Debug Debug dlls 빌드를, Release 빌드는 Release DLL을 참조하도록합니다.
모든 잘 작동하지만, 두 가지 문제가있다 - 하나는 성가신이며, 다른 하나는 정말 심각하다 :
- VS 종속성 계산의 목적을 위해 DLL 참조를 인식하지 못합니다. 새 프로젝트 나 참조가 추가 될 때마다 "프로젝트 종속성"대화 상자를 사용하여 수동으로 종속성을 지정해야합니다. 이것은 성가신 일입니다.
- 우리는 Resharper도 시각적 지원도 사용하지 않습니다 (위대한 도구이지만 사용하지 않습니다.). 표준 "Browse to Definition"명령 (예를 들어, 소스 코드의 컨텍스트 메뉴에서 사용 가능)을 사용하고 싶습니다. 중요한 문제는 한 프로젝트가 프로젝트 참조를 사용하여 다른 프로젝트를 참조하고 참조 된 프로젝트가 솔루션에 포함되어 있어도 참조가 직접 DLL 참조 인 경우 일 때 교차 프로젝트에서만 작동한다는 것입니다. 소스로 이동하는 대신 메타 데이터로 이동하기 때문에 실제적으로 어리 석다.
나는 우리와 같은 dll 참조를 사용하는 이들 사람들의 조언을 구하고이 두 가지 문제를 어떻게 든 극복했습니다. 감사합니다. .
편집 : "찾아 정의에"문제 외에, 대신 프로젝트 참조의 DLL이 참조를 갖는 프로젝트 매니저에 한 번만 비용을 지불해야한다는
참고 - 각각의 프로젝트 종속성을 업데이트하는 것입니다 새 프로젝트가 추가되거나 새로운 종속성이 도입되어야하는 경우 영향을받는 솔루션입니다. 이러한 프로젝트 종속성은 .sln 파일에 유지되며 새 프로젝트가 도착하거나 새로운 종속성이 생성 될 때까지 유지 관리가 필요하지 않습니다.
우리는 VS 서버와 동일한 .sln 파일을 사용하는 CI 서버에서 프로젝트를 빌드하기 위해 msbuild를 사용합니다. 모든 하위 프로젝트를 포함하는 하나의 주 .sln 파일이 있습니다.
두 프로젝트가 참조가 dll 참조이므로 동일한 솔루션에 있지만 더 심각한 문제, 즉 다른 프로젝트에서 정의를 탐색 할 수 없다는 점을 강조하고 싶습니다. 이것은 성가신 일이며 성가신 일입니다. VS가이 기능을 사용하기 위해 프로젝트 참조를 주장 할 이유가 없습니다. Resharper 또는 Visual Assist 같은 다른 도구에는 이러한 제한이 없습니다. 아아, 우리는 이러한 도구를 가지고 있지 않으며 관찰 가능한 미래에는 가질 수 없을 것입니다.
내가 이해하는지 확인하기 위해 하나 이상의 프로젝트가있는 솔루션이 있습니다. 이러한 프로젝트 중 일부는 솔루션에있는 다른 프로젝트의 dll 출력을 참조합니다 (참조 된 프로젝트가 솔루션에 있음에도 불구하고)? –
사실. 그러나 참조 된 프로젝트 중 일부는 포함하지 않는 다른 솔루션도 있습니다. 솔루션을 구성 할 때 이러한 유연성을 갖기 위해서는 dll 만 참조하면됩니다. 그러나 관련 프로젝트가 모두 솔루션에서 발견 되더라도 교차 탐색 프로젝트 인 "Browse to Navigation"기능이 느슨해집니다. – mark
그래, 나는 너무 싫어. 해결책이 정말 좋습니다. –