MSBuild失败复制本地True

时间:2012-01-18 15:34:28

标签: c# visual-studio-2008 msbuild cruisecontrol.net

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

如果CopyLocal选项为True,是否可以使构建活动失败?

我们正在使用MS Build和Cruise控制网自动化构建过程。

1 个答案:

答案 0 :(得分:1)

简短回答:是的!

我不是MSBuild专家,但我知道如何用NAnt做到这一点。它非常简单,与MSBuild实现相同的结果应该没有多大区别。这是一个过程:

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

    对于项目参考:

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

    如果结果大于0,则您将CopyLocal的引用设置为True,因此构建失败。 陷阱:请注意,如果缺少节点True,则CopyLocal也会被视为Private