2012-06-14 7 views
2

까다로운 MSBuild 문제가 있습니다. 여러 웹 사이트를 포함하는 솔루션 파일이 있습니다. 각 웹 사이트에는 공통 프로젝트의 MVC보기 및 다른 웹 사이트 내용의 사본이 필요합니다. 공용 프로젝트는 공유 된 조직 공간에서 파일을 복사합니다. 여기에 그림입니다 :PreBuild 이벤트 및 프로젝트 종속성 (MSBuild)

 

          Site A 
    OrgShared <- Common <- Site B 
          Site C 

파일의 복사본은 .csproj 파일의 PreBuildEvent을 통해 수행됩니다. 문제는 탐지 된 종속성의 빌드 이벤트가 시작되기 전에 PreBuildEvent 명령이 실행된다는 것입니다. 그래서 여기에 이벤트의 순서는 다음과 같습니다

 
1. Site A is build 
    a. Prebuild step is executed (copy files from Common) 
    b. Common is built 
     i. Prebuild step is executed (copy files from OrgShared) 
     ii. Build & postbuild is executed 
    c. Build & postbuild are executed 
2. Site B is built 
    a. Prebuild step is executed (copy files from Common) 
    b. Build & postbuild are executed 

문제는 1a 단계에서 발생한다. Common prebuild 단계가 아직 실행되지 않았기 때문에 Site A는 OrgShared에서 간접적으로 온 파일을받지 못합니다.

OrgShared에서 직접 복사해야하는 사이트 A, B & C에 의존하지 않고 어떻게 효과적으로이 종속성 문제를 해결할 수 있습니까?

답변

2

알아 냈어. 사이트 A가 Common 이전에 빌드 된 이유는 .sln 파일의 주문 때문입니다. 솔루션의 순서를 변경 한 후에는 PreBuildEvent를 Common에서 먼저 실행할 수있었습니다.

전 :

Microsoft Visual Studio Solution File, Format Version 11.00 
# Visual Studio 2010 
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Site A", "SiteA.csproj", "{6E7FAE47-74A6-4740-9AC5-9599E850E834}" 
EndProject 
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "Common.csproj", "{C510B337-7459-4494-BBCB-B79FECD2AA66}" 
EndProject 
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Site B", "SiteB.csproj", "{F3CAFCE9-A96D-4EE5-BE09-420E27344345}" 
EndProject 
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Site C", "SiteC.csproj", "{A50C5DE2-4846-40F2-86B1-B103F413DE0F}" 
EndProject 

후 :

Microsoft Visual Studio Solution File, Format Version 11.00 
# Visual Studio 2010 
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "Common.csproj", "{C510B337-7459-4494-BBCB-B79FECD2AA66}" 
EndProject 
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Site A", "SiteA.csproj", "{6E7FAE47-74A6-4740-9AC5-9599E850E834}" 
EndProject 
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Site B", "SiteB.csproj", "{F3CAFCE9-A96D-4EE5-BE09-420E27344345}" 
EndProject 
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Site C", "SiteC.csproj", "{A50C5DE2-4846-40F2-86B1-B103F413DE0F}" 
EndProject 
관련 문제