MS Build fail CopyLocal True

本文关键字:True CopyLocal fail Build MS | 更新日期: 2023-09-27 18:20:35

我有一个包含100多个c#项目的解决方案。我们总是将所有程序集的CopyLocal选项设置为false,以避免出现某些问题。有时,一些开发人员在项目文件中使用程序集的CopyLocal选项True进行检查。这会在稍后运行软件时产生问题

如果CopyLocal选项为True,是否可能使生成活动失败?

我们正在通过MS build和Cruise control net实现构建过程的自动化。

MS Build fail CopyLocal True

简短回答:是!

我不是MSBuild专家,但我知道如何使用NAnt。它非常简单,使用MSBuild实现相同的结果应该没有太大区别。这就是过程:

  1. 分析解决方案文件以获取解决方案中包含的所有项目文件的路径。不幸的是.sln文件不是xml,但它们是结构化的
  2. 对于每个项目文件:分析项目文件以获取项目的所有引用,并检查CopyLocal=True。如果有的话:失败。由于.csproj文件是xml,因此可以通过XPath表达式轻松完成这一操作。对于CopyLocal设置为True的程序集引用:
count(/Project/ItemGroup/Reference/Private[text()="True"])

项目参考:

count(/Project/ItemGroup/ProjectReference/Private[text()="True"])

如果结果大于0,则具有CopyLocal设置为True的引用,因此生成失败陷阱:请注意,如果缺少节点Private,CopyLocal也被视为True