3

所以我有一个 CommonAssemblyInfo.cs 链接到我的解决方案中的所有项目,并且由我的 rake/albacore 脚本动态生成,该脚本未签入源代码控制。

我还有一个 CommonAssemblyInfo.cs.local 在没有可用的 ruby​​ 时使用,主要供开发人员使用。

在尝试编译我的解决方案之前,是否可以有一个 msbuild 任务或在任何其他项目编译之前运行的东西,它将 CommonAssemblyInfo.cs.local 复制到 CommonAssemblyInfo.cs?我讨厌必须有一个您必须知道并输入的命令才能在 Visual Studio 中打开和构建解决方案。

更新 所以我最终使用批处理文件作为解决方案范围的预构建事件,如下所述:解决方案范围的预构建事件?,它检查 CommonAssemblyInfo.cs 是否存在,如果不存在,则仅使用简单的批处理文件将 CommonAssemblyInfo.cs.local 复制到 CommonAssemblyInfo.cs。

4

2 回答 2

3

这是我最终得到的解决方案。

我将解决方案中的每个项目链接到一个 CommonAssemblyInfo.cs,它是由我的构建脚本(rake + albacore)自动为我生成的。

由于我无法将 CommonAssemblyInfo.cs 签入源代码管理,因此我创建了一个 CommonAssemblyInfo.cs.local。

简单的解决方案:创建 go.bat,它将 CommonAssemblyInfo.cs.local 复制到 CommonAssemblyInfo.cs,开发人员必须在第一次签出项目时运行,然后在 VS 中打开解决方案。

纯粹出于政治原因,如果我这样做了,人们会对我做“非标准”的事情大发雷霆。复杂的解决方案如下:

我在名为 PreBuild 的解决方案中创建了一个项目,解决方案中的每个项目都依赖于它。这会强制构建顺序使得该项目首先构建。该项目包含一个调用以下批处理文件的预构建事件:

echo verifying CommonVersionInfo.cs exists
cd
IF NOT EXIST ..\..\..\CommonAssemblyInfo.cs COPY ..\..\..\CommonAssemblyInfo.cs.local ..\..\..\CommonAssemblyInfo.cs

因此,现在任何选择埋头苦干的开发人员都可以签出项目并在 VS 中愉快地打开它,而根本不知道任何构建脚本的存在。

于 2010-07-12T23:16:21.263 回答
0

您是在谈论 VS IDE 中的编译,还是通过团队构建进行编译?如果您正在谈论团队构建,那么您可以使用“AfterGet”事件作为使用标准“复制”msbuild 任务的地方。如果您谈论的是 VS IDE,那么您仍然可以使用“复制”msbuild 任务。

于 2010-05-28T17:17:44.050 回答