2012-03-19 2 views
2

여러 프로젝트에서 잠재적으로 재사용 할 수있는 사내 .NET 라이브러리를 관리하는 합리적인 방법을 찾아야합니다. 몇 시간 동안이 문제에 대한 인터넷 검색 및 생각을 통해 다음과 같은 결론을 이끌어 냈습니다.이 방법은 공용 라이브러리를 관리하는 좋은 방법입니까?

우리가 보유한 각 라이브러리의 각 버전에 대해 빌드 서버 (Jenkins) . 라이브러리가 성공적으로 빌드되면 빌드 출력 (대개 .dll 파일)이 공통 네트워크 저장소에 복사됩니다. 이 저장소의 구조는 다음과 유사 할 수 있습니다 :

-libraryA 
    -1.0 
     -libraryA_1.0.dll 
    -1.1 
     -libraryA_1.1.dll 
-libraryB 
    -1.0 
     -libraryB_1.0.dll 

특히 프로젝트 종속성을 저장하는 데 사용되는 폴더에이 저장소에서 필요한 라이브러리를 복사합니다 간단한 .bat 파일과 함께 올 것이다 라이브러리를 사용하고자하는 각 프로젝트 . 그런 다음이 폴더에서 종속성을 참조합니다. 예제 프로젝트는 다음과 같이 수 :

-project 
    -src 
    -dependencies 
     -libraryB 
      -1.0 
       -libraryB_1.0.dll 
    -getDependencies.bat 

getDependencies.bat

항상 dependencies 폴더의 내용을 삭제하고 저장소에서 라이브러리의 새로운 복사본을 얻을 것이다. Jenkins에서 프로젝트를 빌드하기 전에 실행됩니다. dependencies 폴더는 결코 SVN에 커밋되지 않습니다.

일부 대안 I도 고려했습니다

  • 대신 간단한 저장소의 공급 NuGet 사용자 정의를 사용. 내가 알기 엔 아직 우리 회사에서 사용중인 Visual Studio 2008에서 NuGet을 사용하는 것은 quite a pain이기 때문에 이것을 버렸습니다. 그렇지 않으면 이것이 내가 선호하는 해결책이 될 것입니다.
  • svn : externals를 사용하여 종속성을 해결합니다. 두 가지 이유로이 점이 마음에 들지 않습니다.
    • 위의 솔루션에서와 같이 이진 파일 만 처리하는 대신 svn : externals는 소스 코드를 처리해야합니다. 필자는 소스 코드로 라이브러리를 사용하는 모든 프로젝트를 혼란스럽게하고 싶지 않습니다.
    • 은 어떻게 든, 관리 종속 SVN 사용하여바로을 느끼지 않는다 (적어도 내 생각에, 사용되어야한다 버전 관리합니다). 또한 svn : externals은 특정 프로젝트의 종속성을 추적하기 어렵게 만들고 프로젝트를 SVN에 너무 의존하게 만듭니다.

사람이 내 선호하는 솔루션 또는 당신이 잘못 생각하는 단지 아무것도 잠재적 인 문제를 지적 할 수 있다면 정말 감사하겠습니다. 또한 휠을 재발견하려고 시도하고 이미이 표준화 된 솔루션이 사용되는 경우 (언급 한 대안 제외) 제발 주저하지 말고 저에게 계몽하십시오 :

대단히 고마워요!

+0

svn : externals에서 멀리 떨어져있는 것이 현명합니다. 그들은 처음에 멋지게 보일지 모르지만, 일단 당신이 그들에게 의존하게되면, 내가 발견 한 다른 소스 제어 시스템에는 상응하는 기능이 없으므로 SVN에 고정됩니다. 적어도 정확히 동일하게 작동하는 것은 없습니다. 우리는 현재의 직장에서 외부 접근법을 사용합니다. – CodingWithSpike

+0

그래, 우리 가게에서 SVN에서 git로 옮기는 것에 대한 몇 가지 이야기가 있었기 때문에 나는 SVN에 너무 의존하고 싶지 않다. –

답변

2

변경 사항을 적용하기 위해 별도의 라이브러리 버전 만 있으면됩니다. 새로운 기능을 추가하고 버그를 수정한다고해서 새로운 버전을 보증하지 않습니다. 또한 라이브러리를 사용하는 프로젝트는 소스 저장소에서 사용중인 이진 파일의 사본을 보관해야합니다.

이렇게하면 개별 프로젝트가 변경되기 전에 변경하지 않고 공유 라이브러리를 변경하고 수정할 수 있습니다.프로젝트는 준비가 된 상태에서 최신 버전을 구하고 변경 사항에 만족하면 새 바이너리를 소스 컨트롤로 확인하여 준비가 된 속도로 받아 들일 수 있습니다.

+0

당신은 정말로 여기에서 생각하고 있어요. 원래 버그가 수정되면 기능이 추가되고 버전이 1.0.0 -> 1.0.1으로 증가 할 때 마이너 버전 (1.0 -> 1.1)을 증가 시키려고했습니다. 각 라이브러리의 폴더 1.0에는 항상 최신 개정판 만 사용할 수 있으며 SVN에서 커밋 된 참조 라이브러리가 없으므로 각 프로젝트가 항상 가장 버그없는 버전을 사용할 수 있도록 할 것입니다. 이제 당신의 접근 방식이 더 합리적이라는 것을 인정해야합니다. 아무도 사고를 위해 더 좋은 음식을 제공하지 않는다면 나는 대답을 표시 할 것입니다. 고맙습니다! –

관련 문제