2

我遇到了一个棘手的 MSBuild 问题。有一个包含多个网站的解决方案文件。每个网站都需要一个 MVC 视图的副本以及来自公共项目的其他网站内容。该公共项目从共享的组织空间复制文件。这是一个插图:

                          站点 A
  组织共享 <- 通用 <- 站点 B
                          站点 C

通过文件的 PreBuildEvent 执行文件复制.csproj。问题是 PreBuildEvent 命令在检测到的依赖项的构建事件被触发之前运行。所以这是事件的顺序:

1. 站点 A 已建成
   一种。执行预构建步骤(从 Common 复制文件)
   湾。共建
      一世。执行预构建步骤(从 OrgShared 复制文件)
      ii. 执行构建和构建后
   C。执行构建和构建后
2. B站建成
   一种。执行预构建步骤(从 Common 复制文件)
   湾。执行构建和构建后

问题出现在步骤 1a。由于尚未执行 Common prebuild 步骤,因此站点 A 不会收到间接来自 OrgShared 的文件。

我怎样才能有效地解决这个依赖问题,而无需依赖站点 A、B 和 C 必须直接从 OrgShared 复制?

4

1 回答 1

2

弄清楚了。Site 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
于 2012-06-14T02:43:25.037 回答