【问题标题】:Replicate Nant Solution task dependency resolution with MSBuild使用 MSBuild 复制 Nant 解决方案任务依赖解析
【发布时间】:2015-03-19 11:23:11
【问题描述】:

我正在尝试将 .NET CI 从 Nant 移动到 MSBuild 以绕过 Nant 解决方案任务限制,但我无法重现 Nant 程序集引用行为。 Nant 解决方案任务在 VS 项目中查找二进制引用,如果项目包含在解决方案中,则将它们转换为项目引用。 在我的组织中,开发人员使用对基础库的二进制引用,但在夜间构建期间,我想从源代码构建所有内容。 我可以创建一个解决方案文件,其中所有项目都更改输出目录,看来我必须手动指定构建顺序,这是一项艰巨的工作。 有办法做这样的事情还是我做错了什么? 我想将此脚本与 TeamCity 或 CruiseControl.Net 一起使用

<solution configuration="release" outputdir="C:\output\bin">
  <projects>
    <include name="ProjectA.csproj" />
    <include name="ProjectB.csproj" />
    <include name="ProjectC.csproj" />
  </projects>
</solution>

如果 ProjectA 引用 projectB.dll 和 ProjectB 引用 projectC.dll Nant 按以下顺序执行构建:ProjectC-ProjectB-ProjectA,使用已编译项目的输出作为引用。

【问题讨论】:

  • 请出示代码
  • 添加了示例脚本。

标签: c# msbuild teamcity cruisecontrol.net nant


【解决方案1】:

我会坚持使用 Nant,并在 nant 中调用 msbuild 来编译您的解决方案。 只需使用 exec 任务调用 msbuild,您就可以完全控制所有参数。从 nant 更改为 msbuild 需要换位思考 :-)

通常每个项目都有一个“lib”文件夹,并且该文件夹是已知的。 从所有项目中获取源代码,编译C并将其复制到B的lib中等等。 这确实是一项手动任务,但依赖项并没有太大变化。

对于更自动化的方式,也许以下链接可以帮助您 http://blog.dantup.com/2012/05/free-dependency-graph-generation-using-powershell-and-yuml/

如果你谷歌一下,你可以使用其他免费的库,我不知道哪个最适合你。

【讨论】:

  • 谢谢,“手动”解决方案应该是可能的,但除了目标目录之外,还有编译顺序,如果你有很多项目,这是一项非常繁重的工作。我会尝试调查第二个想法:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 2011-09-15
  • 2010-11-11
  • 2016-06-07
  • 1970-01-01
相关资源
最近更新 更多