2009-05-03 7 views
1

2 개의 프로젝트가있는 VS 2008 솔루션이 있습니다. 프로젝트 A는 프로젝트 B (MVC 프로젝트)에서 사용하는 어셈블리로 빌드합니다.어떻게 사용자 지정 msbuild 작업을 제대로 수행 할 수 있습니까?

  1. 프로젝트 A의 bin 디렉토리에 내 AssemblyFile 속성 점, 모든 것이 잘 작동하는 경우 : 나는이 문제에 걸쳐 프로젝트 나에게 내가 온

    을 구축 할 때 내가 전화 프로젝트 A의 사용자 지정 작업을 만들었습니다. 그러나 프로젝트 B를 정리하려고 할 때, 프로젝트 A의 어셈블리가 다른 프로세스 (devenv.exe로 밝혀졌습니다)에 의해 사용 중이므로 삭제할 수 없으므로 오류가 발생합니다.

  2. AssemblyFile 속성이 Project B의 bin 디렉터리를 가리키는 경우 빌드가 실패하여 Project A의 어셈블리를로드하거나 찾을 수 없다는 오류가 발생합니다. 나는 경로, 파일 이름, 대문자/소문자, 철자법을 세 번 확인했으며 또한 빌드가 실패 할 때 프로젝트 A의 어셈블리가 실제로 있는지 확인했습니다.

시나리오 1과 2의 문제점은 무엇입니까? 아니면 AssemblyFile을 어디로 가리켜 야합니까? 모든 것을 실패하면 더 좋은 방법이 있을까요? 당신은 서로 독립적으로 두 개의 프로젝트를 빌드하려면

+0

안녕 난 그냥 궁금 , 프로젝트 B를 가지고하지 않는 이유가이 프로젝트 A를 따라? 모든 작업이 필요하지 않을 수도 있습니다처럼 그것은 당신이 솔루션 파일이 있다면, 그 프로젝트 B는 제거에서 빌드 시스템이 더 효과적 일 수 있도록하는 솔루션/프로젝트 파일 종속성의 기록을 갖는 프로젝트 A에 의존 소리 파일? 귀하의 구현에 대한 가정을하지 않도록 조심하고 있습니다. –

+0

사실 하나의 어셈블리를 사용하려고했지만 문제가 여전히 발생합니다. 왜이 ... 에 내장 어디에 – sean

답변

1

, 당신은 ...이에 내장 년대 VS 출력 디렉토리에서 "A"어셈블리를 참조 할 수 없습니다 나는이 상황을 처리 할 방법

:

트렁크 내 프로젝트 폴더의 최상위 수준에 종속 폴더를 만듭니다 .. 예 :

  • ~/트렁크/종속
  • ~/트렁크/프로젝트
  • 이 건설 된 후

그런

  • ~/트렁크/프로젝트/PROJECTA
  • ~/트렁크/프로젝트/projectB이 PROJECTA에 대한 빌드 작업에서 ~/트렁크에 어셈블리를 복사/폴더 종속성 . projectB에서

    는 ~/

    이 당신이 마음대로 projectB를 청소 할 수 있습니다 (그래서 당신이 때 .refresh 파일을 생성) 폴더 종속성과 "A"어셈블리가 다운 될 때마다 가져됩니다에 해당 어셈블리를 참조 너는 좋아한다. CI를 들어


    , 우리는 JetBrains TeamCity을 사용하고 우리의 빌드에 대한 아티팩트를 작성, 필요에 따라 다음 빌드 작업은 그 아티팩트를 참조합니다.

  • +0

    > 다음>은 VS 출력에서 ​​디렉토리를 "A"어셈블리를 참조 할 수 없습니다? 사용자 지정 작업은 모든 어셈블리가 컴파일되고 출력 디렉터리에 복사 된 후 빌드 프로세스 후에 수행됩니다. 아니면 이건 또 다른 문제인가? 내가 별도의 어셈블리의 사용자 지정 작업을 가졌다 찾을 수 유일한 문제 무료 방법, 조립 C. 나는 CI에 대한 CruiseControl.NET을 사용합니다. TeamCity에 대해 간략하게 살펴 봤는데 UI가 훨씬 더 나은 것 같습니다. 그러나 현재 CI는 고독한 개발자에게 과도한 부담이됩니다. – sean

    1

    프로젝트에서 참조를 정의하는 데는 몇 가지 방법이 있습니다.

    1. 프로젝트 참조 -이 당신의 빌드 순서를 결정합니다 VS으로 더욱 통합 된 접근 방식입니다. 따라서 프로젝트 B를 빌드하면 VS는 프로젝트 B가 프로젝트 A에 종속되어 있는지 확인하고 프로젝트 A를 먼저 작성하고 출력 위치에서 A의 출력 dll을 사용합니다. 프로젝트 참조를 사용하는 단점은 프로젝트 B를 다른 솔루션에 포함 시키려면 프로젝트 A를 포함해야한다는 것입니다.

    2. 어셈블리 참조 - 어셈블리에 대한 참조를 직접 정의 할 수도 있습니다. 이것이 당신이 사용하고있는 방법 인 것처럼 들립니다. 당신이 프로젝트 (A)의/빈에서 ProjA.dll에 프로젝트 B에서 파일 참조를 설정할 때이 경우, 비주얼 스튜디오는 처음 ProjA.dll을 만들기 위해 프로젝트를 구축해야 함을 알 수 없습니다. 적절한 "프로젝트 종속성"을 설정하여 Visual Studio에서 먼저 Project A를 빌드하도록 지시 할 수 있습니다.

    이렇게하려면 솔루션에서 ProjA와 ProjB를 모두로드하십시오. 시나리오 2에서 정의한대로 어셈블리 참조가 이미 있다고 가정하면 프로젝트 B를 마우스 오른쪽 단추로 클릭하고 "프로젝트 종속성 ..."을 선택하십시오. 여기에서 목록의 프로젝트 A 옆에 체크 표시를하십시오. 이제 솔루션을 정리하고 빌드 할 때 VS는 프로젝트를 빌드하는 순서를 알고 있습니다.

    이 솔루션 수준에서 정의하고 '프로젝트 종속성' '주문 제작'주의하는 것도 중요합니다. 따라서 종속 프로젝트가있는 다른 솔루션을 파일 참조로 정의하는 경우 해당 새 솔루션의 빌드 순서를 설정해야합니다.

    관련 문제