【发布时间】:2009-08-25 23:04:21
【问题描述】:
好的,我正在尝试处理的构建环境有一个有点复杂的问题。
我有一个包含多个 C# 项目的解决方案文件,该项目由调用 MSBuild 的 NAnt 脚本构建 - 向 MSBuild 传递解决方案文件的名称和将二进制文件复制到的路径。这是因为我希望我的自动构建环境 (CruiseControl.Net) 创建一个以每个构建的修订版命名的文件夹 - 这样我可以轻松地以任何原因返回到以前的二进制文件。
所以理想情况下我有这样的文件夹布局
c:\build\nightly\rev1
c:\build\nightly\rev2
c:\build\nightly\rev3
...
c:\build\nightly\rev10
etc.
出现的问题是我最近将最新版本的 Unity IoC 容器添加到我的项目中,直接从 MS 的在线 SVN 存储库中检查它。发生的事情是我有一个 Silverlight 3 项目,它引用了 Unity 的 Silverlight 版本,但我还有其他项目(即我的单元测试项目)引用了 Unity 的标准(非 Silverlight)版本。
因此,由于 MSBuild 将所有内容转储到一个文件夹中,Silverlight 版本的 Unity 程序集将覆盖非 Silverlight 版本,因为它们具有完全相同的程序集文件名。
然后当 CruistControl 运行我的单元测试时,它们会失败,因为它们不再具有可用的适当依赖项(它们尝试加载 Silverlight 特定的 Unity 程序集,这显然不起作用)。
所以我想做的是:
- 保留我想要的输出目录 结构(文件夹\修订)
- 我不想手动编辑 我拥有的每个项目文件 添加新的时容易出错 项目解决方案
理想情况下,我希望 MSBuild 将所有内容放入类似于以下的文件夹结构中:
nightly\revision1\project1
nightly\revision1\project2
nightly\revision1\project3
...
nightly\revision2\project1
nightly\revision2\project2
nightly\revision2\project3
etc
我不能修改 Unity 项目来给它一个不同的文件名,因为它来自另一个我无法提交更改的 SVN 存储库。我在这里发现了一个类似的问题,建议的解决方案是使用“主”MSBuild 文件,该文件使用自定义任务从解决方案中提取所有项目文件名,然后遍历每个构建它们的文件名。我试过了,但它没有按照它们的依赖顺序构建它们,所以我的项目失败了。
帮助?
【问题讨论】:
标签: msbuild