2011-04-20 4 views
5

좋아요, 그래서 우리는 그 안에 약 8 개의 다른 프로젝트가있는 다소 큰 솔루션을 가지고 있습니다. 이 프로젝트들 각각은 다양한 제 3 자 어셈블리에 의존합니다. 이 솔루션은 소스 제어의 트렁크 분기에 있습니다. 우리는 또한 트렁크에서 약 5 개의 다른 가지를 가지고 있습니다.타사 어셈블리는 어디에 보관해야합니까?

이러한 타사 어셈블리를 관리하는 가장 좋은 방법은 무엇입니까? 어셈블리에 대한 참조를 추가하고이를 클릭하고 속성 창을 볼 때 어셈블리에 대한 하드 코딩 된 경로가 있음을 알게됩니다.

예 : 모든 지점은 "C : \ Code \"에 매핑됩니다. 따라서 트렁크는 "C : \ Code \ Trunk"이고 분기는 "C : \ Code \ somebranch"가됩니다.

"어셈블리"라는 "C : \ Code \ Trunk"폴더를 만든 다음 해당 폴더에 모든 타사 어셈블리를 놓은 다음 해당 어셈블리 참조를 상대 어셈블리에 추가하면 ? 추가 된 어셈블리를 클릭하면 회색으로 표시된 경로 속성에 "C : \ Code \ Trunk \ Assemblies \ someassembly.dll"이라고 표시됩니다.

그런 다음 트렁크에서 분기하면 어떻게됩니까? "somebranch"에 "C : \ Code \ Trunk \ Assemblies \ someassembly.dll"에 대한 참조가 있거나 "C : \ Code \ somebranch \ Assemblies \ someassembly.dll"을 참조하겠습니까?

현재 우리는 실제로 "C : \ Code \"에 다른 분기와 마찬가지로 매핑되는 "어셈블리"라는 소스 컨트롤에 분기를 갖고 있습니다. 따라서 어셈블리를 참조하는 프로젝트가있는 모든 브랜치는 프로젝트가 어떤 분기에 있더라도 "C : \ Code \ Assemblies \ someassembly.dll"에 대한 참조를 가지므로 경로는 동일합니다.

불행하게도 이것은 성공적으로 솔루션을 빌드하려면 작업중인 분기의 최신 버전과 어셈블리 분기를 얻어야한다는 것을 의미합니다.

모든 것을 요약하면 :

  • 어떻게 해결책을 기준으로 참조를 추가하는 방법은 무엇입니까? (예 : C : \ Code \ Trunk \ Assemblies \ someassembly.dll에 대한 참조를 추가하고 해당 경로를 추가 한 프로젝트와 관련 시켜서 분기를 만들 때 분기 된 어셈블리 폴더가 아니라 트렁크의 어셈블리 폴더를 참조하도록하십시오. 이 참조가 상대 이미?

  • 제 3 자 어셈블리를 관리하기위한 다른 추천 전략은 무엇입니까?

답변

2

예 트렁크의 어셈블리 폴더를 사용합니다. 나는 lib라는 이름을 좋아한다.

예 경로가 이미 상대적입니다. 분기 할 때 프로젝트에 올바른 어셈블리 폴더가 생깁니다.

사용중인 타사 어셈블리 수에 따라 어셈블리 폴더를 구성하여 dll의 큰 혼란이되지 않도록하십시오.

+0

오른쪽 우리가 실제로 어셈블리 깔끔한 하위 디렉토리로 나누어 폴더에 있습니다. 이러한 경로가 상대적인 경우 문제가 아닌 것 같습니다. 도와 주셔서 감사합니다. – Chev

0

내가 보통 다른 모든 참조 공통 프로젝트를 만듭니다. 그 공통의 프로젝트 안에서 나는 폴더를 만들 종속성에 대해 deps (다른 프로젝트는 각각 공통 프로젝트의 deps 폴더에있는 DLL 복사본을 참조합니다.)

5

이제 우리는 nuget을 지원하며, 모든 지원되는 oss 패키지에 사용할 수 있으며 다른 타사 어셈블리에도 your own nuget packages을 생성 할 수 있습니다. Nuget의 대안으로 openwrap을 언급 할 가치가 있습니다.솔루션 수준

에서

nuget 저장 패키지는 각각의 지점 (몸통)는 이러한 버전을 유지하는 것입니다.

나는 이것이 바람직한 행동이라고 제안합니다. 예를 들어 타사를 업그레이드하는 경우 어셈블리 버전을 별도로 유지해야합니다.

이전에는 svn의 externals 명령을 사용하여 내부적으로 개발 된 종속성에서 특정 버전을 빌드했습니다. 저장소에 스틱을 붙이지 않고 외부 버전 (또는 scm과 동등한 버전)을 사용하여 올바른 버전을 얻을 이유가 없습니다.

dll을 올바른 위치에 가져 오기 위해 빌드 이벤트를 사용했습니다.

1

타사 참조 용 SolutionItems 폴더가 있습니다. 솔루션의 모든 지점에는 자체 복사본이 있습니다.

참조를 추가 할 때 참조 추가 대화 상자에서 '찾아보기'탭을 사용하고 현재 프로젝트와 관련된 어셈블리를 선택합니다.

프로젝트 파일이 포함되어 있습니다

<Reference Include="SomeAssembly, Version=0.1.0.0, Culture=neutral, PublicKeyToken=8xxxxxxxxxxx, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\Solution Items\SomeAssembly.dll</HintPath> 
</Reference> 
관련 문제