2012-08-02 2 views
0

의 이전 버전을 사용하여 내가 가진 :은 MSBuild - 조립

  • 공유 기능 [A]
  • 또 다른 라이브러리 [B]의 라이브러리 이는의 참조 v1의 [A1]

현재 Visual Studio 솔루션의 내용은 다음과 같습니다.

  • dll [L] (파일 참조) B
  • (프로젝트)가 L을 참조하고 업데이트되었지만 이전 버전과 호환되는 A, [A2] 버전에 대한 파일 참조가있는 WindowsService [S].

Visual Studio에서 솔루션을 빌드하면 모든 것이 잘 동작합니다. S의 bin 폴더에는 L, B 및 A2가 들어 있습니다 (B와 호환되므로 잘 작동 함).

그러나 TeamBuild를 통해 MSBuild를 사용하여 빌드하면 최종 빌드 폴더는 L, B 및 A1으로 끝납니다. A1에는 S가 요구하는 라이브러리 A의 새 기능이 없으므로 S를 실행하려고하면 S가 넘어갑니다.


MSBuild에서 무시되는 .sln 빌드 순서와 관련이 있다는 몇 가지 사항을 읽었습니다.

나는 L에 대한 bin 디렉토리에 A2에 대한 참조가 없으므로 기대했던대로 B와 A1이 포함되어 있음을 발견했습니다. 아마도 MSBuild가 L (로컬로 B와 A1을 가져옴)과 S (L과 A2를 가져옴)를 빌드했을 때 모든 바이너리를 빌드의 최종 출력으로 병합해야합니다. 내가 이해하지 못하는 것은 A2 (S 빈에서) 이상으로 A1을 (L 빈에서) 선택하게하는 것입니다.

다른 방법으로 사용해야한다고 말할 것도 없지만 MSBuild가이 호출을하기 위해 사용하는 기준을 모릅니다.

아무에게도 불만을 제기 할 수 있습니까?

답변

0

Tom은 모든 프로젝트의 모든 출력 dll이 outputdirectory에 저장된다는 점에서 msbuild가 작동하는 방식입니다. 이 출력 디렉터리는 솔루션의 모든 프로젝트에 대해 공유됩니다. 그래서 만약 당신이 같은 dll의 서로 다른 버전이 있다면 그들은 서로를 덮어 씁니다.

이 방법은 $ (Outdir) \ SpecificDir 같은 프로젝트에 대한 하위 디렉터리를 사용하거나 버전 태그 즉 A.1.0.dll 및 A.dll로 DLL 이름을 바꿉니다.