2012-01-18 65 views
1

我有超过100个c#项目的解决方案。我们总是为所有程序集制作CopyLocal选项以避免一些问题。有时候一些开发人员使用CopyLocal选项在程序集文件中选择True。这会在以后运行软件时产生问题MS Build fail CopyLocal True

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

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

+0

这是一个XY问题。必须处理CopyLocal = False的项目文件对于需要测试其代码的开发者来说非常痛苦。所以他们当然会一遍又一遍地改变设置,忘记把它放回去。可能是故意的,因为他们厌倦了这种麻烦。构建失败只会带来更多的麻烦。使其适用于该设置。 – 2012-01-18 18:01:48

+0

根据主席的回答,你可以做你想问的问题。但是为了读取每个文件的值,为什么不把它重置为'false'呢?或者我在这里错过了什么? – mickeyf 2012-01-18 22:03:45

回答

1

简答:是!

我不是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