如何在构建期间检查引用

时间:2014-03-17 16:32:51

标签: visual-studio msbuild tfsbuild

我正在寻找一种方法来检查解决方案中的所有项目是否都有来自"对"路径。

让我们说,引用只能是:

  • 项目参考
  • 来自.... \ Lib \
  • 来自.... \ Lib2 \

不允许任何其他路径。

我希望在构建TFS或(和)作为签入规则时进行此验证。有办法怎么做?

我可能能够将Visual Studio扩展写入EnvDTE对象。但这是备份计划。

2 个答案:

答案 0 :(得分:1)

我不知道通过静态分析(这似乎是你想要的)强制执行此操作的方法。

但是,通过CI构建设置,它在实践中实现了同样的目的。如果人们在\ bin \ debug中引用了一些东西(这是典型的问题),那么CI构建将无法找到它们,因为它将二进制文件指向另一个目录,CI Build将失败,开发人员将被迫使用正确引用lib。

答案 1 :(得分:1)

  1. 在构建定义模板中添加自定义活动。
  2. 自定义活动搜索所有.CSPROJ(如果需要,还包括其他项目类型)。 例如:
  3.   

    Directory.GetFiles(ROOTPATH,“*。csproj”,SearchOption.AllDirectories);

    1. 使用XPATH查询搜索.CSPROJ文件以查找HintPath节点:

          XmlDocument xmlDoc = new XmlDocument();
          xmlDoc.Load(nameofcsprojfile);
      
          //Find the current namespace from the XMLDOC and add it to XMLNMManager
          XmlNamespaceManager xnManager = new XmlNamespaceManager(xmlDoc.NameTable);
          xnManager.AddNamespace("nm", xmlDoc.DocumentElement.NamespaceURI);
      
          //find the nodes based on the following XPATH query
          XmlNode xmlRoot = xmlDoc.DocumentElement;
          XmlNodeList xmlProperty = xmlRoot.SelectNodes("//nm:ItemGroup/Reference[@Include]", xnManager);
      
    2. 浏览每个Reference节点并获取HintPath属性并确保它包含(lib或lib2)。

    3. 如果不包含,则将活动错误。您可以在活动中编写以下代码以使构建错误。

    4.   

      context.TrackBuildError(“修复引用问题!!!”);