所以我有一个CommonAssemblyInfo.cs链接到我的解决方案中的所有项目,并且是由我的rake / albacore脚本动态生成的,没有检查到源代码管理中。
我还有一个CommonAssemblyInfo.cs.local,供没有可用的ruby时使用,主要由开发人员使用。
在尝试编译我的解决方案之前,是否可以在将CommonAssemblyInfo.cs.local复制到CommonAssemblyInfo.cs的任何其他项目编译之前运行msbuild任务或其他东西?我讨厌必须知道并输入一个命令,以便在Visual Studio中打开并修复解决方案。
更新的 所以我最终使用批处理文件作为解决方案范围的预构建事件,如下所述:Solution-wide pre-build event?,它检查CommonAssemblyInfo.cs是否存在,如果不存在,则将CommonAssemblyInfo.cs.local复制到CommonAssemblyInfo.cs一个简单的批处理文件。
答案 0 :(得分: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中幸福地打开它,而不知道任何构建脚本都存在。
答案 1 :(得分:0)
您是在谈论VS IDE中的编译,还是通过团队构建进行编译?如果您正在讨论团队构建,那么您可以使用“AfterGet”事件作为使用标准“复制”msbuild任务的地方。如果您正在谈论VS IDE,那么您仍然可以使用“复制”msbuild任务。