2012-06-14 24 views
2

我遇到了棘手的MSBuild问题。有一个包含多个网站的解决方案文件。每个网站都需要一个共同项目的MVC视图和其他网站内容的副本。该共同项目从共享组织空间复制文件。这里有一个例证:MSBuild中的PreBuildEvent和项目依赖关系

 

          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步骤尚未执行,因此站点A不会收到间接来自OrgShared的文件。

如何在不依赖站点A,B & C直接从OrgShared中直接复制的情况下有效解决此依赖性问题?

回答

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