好了,我有我的构建环境比较复杂的问题,我试图去处理。的MSBuild覆盖依赖
我有一个解决方案文件,其中包含多个由NAnt脚本调用MSBuild构建的C#项目 - 传递MSBuild解决方案文件的名称和将二进制文件复制到的路径。这是因为我想让我的自动化构建环境(CruiseControl.Net)创建一个以修订每个构建命名的文件夹 - 这样我可以很容易地返回到以前的二进制文件出于任何原因。
所以idealy我有一个文件夹的布局像这样
c:\build\nightly\rev1
c:\build\nightly\rev2
c:\build\nightly\rev3
...
c:\build\nightly\rev10
etc.
的问题多数民众赞成出现是我最近添加了最新版本的统一IoC容器到我的项目,直接检查出来MS在线SVN仓库的。发生了什么是我有一个引用Silverlight版本的Unity的Silverlight 3项目,但我也有其他项目(即我的单元测试项目)引用标准(非Silverlight)版本的Unity。
所以会发生什么是自MSBuild的倾销一切都变成一个单一的文件夹统一装配的的Silverlight版本覆盖非Silverlight的版本,因为他们有相同的组件文件名。
然后当CruistControl运行,因为他们没有提供适当的相依他们没有我的单元测试了(他们试图加载的显然是行不通的Silverlight的具体统一组装)。
所以我想要做的是:
- 保持我的期望的输出目录 结构(文件夹\修订)
- 我不想手动编辑 每一个凸出的文件我有因为这 添加新 项目,以解决
Idealy时很容易出错,我想的MSBuild把一切都变成一个类似的文件夹结构:
nightly\revision1\project1
nightly\revision1\project2
nightly\revision1\project3
...
nightly\revision2\project1
nightly\revision2\project2
nightly\revision2\project3
etc
我不能修改统一项目,因为它来自另一个SVN仓库我不能更改提交给它一个不同的文件名。我在这里发现了一个类似的问题,建议的解决方案是使用“主”MSBuild文件,该文件使用自定义任务从解决方案中提取所有项目文件名,然后遍历构建它们的每个项目文件名。我尝试过,但它并没有按照它们的依赖关系构建它们,所以它对我的项目失败了。
帮助?