所以我有一个 CommonAssemblyInfo.cs 链接到我的解决方案中的所有项目,它是由我的 rake/albacore 脚本动态生成的,它没有 checkin 源代码控制。
我还有一个 CommonAssemblyInfo.cs.local 供在没有可用的 ruby 时使用,主要供开发人员使用。
在尝试编译我的解决方案之前,是否可以有一个 msbuild 任务或在任何其他项目编译之前运行的任务,这些任务会将 CommonAssemblyInfo.cs.local 复制到 CommonAssemblyInfo.cs?我讨厌必须有一个命令,你必须知道并键入才能在 Visual Studio 中打开和构建解决方案。
更新 所以我最终使用批处理文件作为解决方案范围的预构建事件,如下所述:Solution-wide pre-build event? ,它会检查 CommonAssemblyInfo.cs 是否存在,如果不存在,则仅使用一个简单的批处理文件将 CommonAssemblyInfo.cs.local 复制到 CommonAssemblyInfo.cs。
最佳答案
这是我最终得到的解决方案。
我将解决方案中的每个项目都链接到 CommonAssemblyInfo.cs,这是由我的构建脚本 (rake + albacore) 自动为我生成的。
由于我无法将 CommonAssemblyInfo.cs checkin 源代码管理,因此我创建了一个 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 中愉快地打开它,而根本不知道任何构建脚本的存在。
关于msbuild - 版本控制 CommonAssemblyInfo.cs 和 MSBuild,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2930984/