2009-09-13 3 views
1

작성을 위해 Subversion과 Nant 사용. 몇 가지 하위 프로젝트에 의존하는 기본 프로젝트가 있습니다. 하위 프로젝트는 전복 내부에 별도의 프로젝트로 존재합니다.Nant : svn-externals를 사용하여 프로젝트 빌드

내 질문 : 기본 프로젝트의 nant 빌드 스크립트가 참조 된 모든 하위 프로젝트와 자체를 빌드해야합니까? 또는 하위 프로젝트가 어떻게 빌드 하는지를 알고 어떻게 든 서브 빌드를 메인 빌드 파일에서 빌드 파일이라고 부르며 어떻게 든 모든 결과를 메인 프로젝트 빌드 출력으로 어셈블합니다.

저는 현재 mainproject 빌드 파일에 모든 하위 프로젝트를 빌드해야합니다. 즉, 빌드 파일의 각 하위 프로젝트에 대한 타겟이 없습니다. 그러나 이는 주 빌드 파일과 하위 프로젝트 사이의 긴밀한 결합을 만드는 것으로 보입니다. "하위 프로젝트가 스스로를 구축하는 방법을 알고 있습니다."라고 말하면서 주 프로젝트에서 스스로를 구축하고 결과물을 조합하도록 요청할 수 있다면 좋을 것입니다. 내가 Subversion을 svn의-외관 속성을 사용하여 하위 프로젝트 당기는거야

/Repo 
    /MainProject 
    /trunk 
     /doc <-- documentation 
     /lib <-- binary-only DLLs (usually 3rd party) 
     /src <-- source code for MainProject 
     /svn-externals <-- hold references to other projects in repository 
... 
    /ClassLib1 
    /trunk 
     /doc 
     /lib 
     /src 
     /svn-externals 
... 
    /ClassLib2 
    /trunk 
     /doc 
     /lib 
     /src 
     /svn-externals 
... 
    /ClassLibCommon 
    /trunk 
     /doc 
     /lib 
     /src 
     /svn-externals 

: 같은

는 참고로, 내 저장소 보인다. 그래서 제 작업 복사본은 다음과 같습니다 :

/MainProject 
    /build 
    /doc 
    /lib 
    /src 
    /MainProject 
    /svn-externals 
    /ClassLib1 <-- svn external to svn://xyz/repo/ClassLib1/trunk 
     /doc 
     /lib 
     /src 
     /svn-externals 
     /ClassLibCommon <- svn external to svn://xyz/repo/ClassLibCommon/trunk 
      ... 
    /ClassLib2 <-- svn external to svn://xyz/repo/ClassLib2/trunk 
     /doc 
     /lib 
     /src 
     /svn-externals 
     /ClassLibCommon <- svn external to svn://xyz/repo/ClassLibCommon/trunk 
      ... 

답변

0

질문에 대한 대답은 물론 "의존합니다"입니다.

솔루션에서 "하위 프로젝트"를 참조하는 방법이나 다른 솔루션 (주 프로젝트)에서 사용하는 방법은 무엇입니까? 프로젝트 참조입니까? 그렇다면 MSBuild를 호출하여 솔루션을 빌드하지 마십시오. 그러면 이러한 종속성을 기반으로 모든 하위 프로젝트가 빌드됩니다. 나는 이것이 당신이 설정 한 방법이라고 가정 할 수 있습니다.

개인적으로 나는 당신처럼 보이는 설정을 프로젝트 참조를 사용하지 않을 것이고 각 프로젝트의 모든 코드에 대한 외관을 가질 수 있습니다. 제 3 자 DLL을 다루는 것과 마찬가지로 서브 프로젝트를 동일하게 취급합니다.

이렇게하면 DLL 참조를 사용하게됩니다. 이렇게하면 기본 프로젝트의 하위 프로젝트가 분리됩니다. 이것은 내가 갈 방법, 특히 그 하위 프로젝트가 다른 프로젝트에 의해 참조되는 경우입니다.

예, 이제 소스 제어에 저장하는 것과 같은 다른 결정을 내려야합니다. 당신은 당신의 lib 폴더에 외부를 가질 수 있습니다 ... 아니면 그냥 lib 폴더에 DLL의 복사본을 넣을 수 있습니다. 이것은 또한 버전 관리를 어떻게 제어 하느냐에 달려 있습니다.

또한 CC.Net과 같은 일부 유형의 CI를 사용하는지 언급하지 않습니다. Sub-Project 중 하나라도 수정하면 기본 프로젝트를 다시 빌드하도록 트리거 할 수 있습니다.

+0

라이브러리 프로젝트는 다른 "기본"프로젝트에서 사용됩니다. 그것들은 프로젝트 참조입니다. 두 가지 : 1. 라이브러리가 자주 변경됩니다. 2. 나는 기존의 지혜가 소스 코드를 가지고있는 바이너리를 저장하지 않는다고 생각했다. – User

+0

다릅니다. 저에게 타기보다는 하나 이상의 솔루션으로 프로젝트를 언급하지 마십시오. 주 프로젝트의 일부가 아닌 공유 라이브러리를 고려합니다. 그래서, 내 Crystal Report DLL을 svn에 넣는 것과 마찬가지로 내부 프레임 워크 DLL도 거기에 넣습니다. 또한 DLL 참조는 각 프로젝트에서 사용중인 해당 라이브러리 버전에 대한 제어 기능을 제공합니다. 당연히 당신은 위의 작업을 수행 할 수 있고 바이너리를 svn에 두지 않을 수 있습니다. 네트워크 공유에 배치하십시오. – PilotBob

+0

"둘 이상의 솔루션에서 프로젝트를 언급하지 않으면"이 사실을 잘 모르겠다.명확히하기 위해, 내가 "프로젝트"라는 용어를 사용했을 때 나는 시각적 인 스튜디오 감각이 아닌 일반적인 의미에서 그것을 의미합니다. 그래서 제 생각에, 클래스 라이브러리 "프로젝트"(실제로는 자체 솔루션)는 하나 이상의 솔루션에서 사용하도록되어 있습니다. – User

관련 문제