Visual studio 如何在构建期间检查引用

Visual studio 如何在构建期间检查引用,visual-studio,msbuild,tfsbuild,Visual Studio,Msbuild,Tfsbuild,我正在寻找一种方法来检查解决方案中的所有项目是否都有来自“正确”路径的引用 比方说,引用只能通过以下方式进行: 项目参考 从…\Lib\ 来自…\Lib2\ 不允许使用任何其他路径 我希望在基于TFS或(和)的构建期间将此验证作为签入规则。有办法吗 我可能能够编写VisualStudio扩展来挖掘EnvDTE对象。但这是一个备份计划。我不知道如何通过静态分析(这似乎是您想要的)来实现这一点 然而,通过CI构建设置,它在实践中实现了同样的效果。如果人们引用\bin\debug中的内容(这是一个

我正在寻找一种方法来检查解决方案中的所有项目是否都有来自“正确”路径的引用

比方说,引用只能通过以下方式进行:

  • 项目参考
  • 从…\Lib\
  • 来自…\Lib2\
不允许使用任何其他路径

我希望在基于TFS或(和)的构建期间将此验证作为签入规则。有办法吗


我可能能够编写VisualStudio扩展来挖掘EnvDTE对象。但这是一个备份计划。

我不知道如何通过静态分析(这似乎是您想要的)来实现这一点

然而,通过CI构建设置,它在实践中实现了同样的效果。如果人们引用\bin\debug中的内容(这是一个典型的问题),CI构建将无法找到它们,因为它将二进制文件定向到不同的目录,CI构建将失败,开发人员将被迫使用对lib的正确引用

  • 在生成定义模板中添加自定义活动
  • 自定义活动搜索所有.CSPROJ(如果需要,包括其他项目类型)。 例如:
  • 目录.GetFiles(ROOTPATH,“*.csproj”,SearchOption.AllDirectories)

  • 使用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);
    
  • 遍历每个引用节点并获取HintPath属性,并确保它包含(lib或lib2)

  • 如果不包含,则将活动出错。您可以在“活动”中编写以下代码以出错生成

  • TrackBuildError(“修复引用问题!!!”


    相关人士:谢谢。这是我已经拥有的。但我正在寻找一些可以防止破坏构建的东西。我没有提到这一点,但我在TFS2013中使用git作为源代码控制。在这种情况下,不支持封闭构建。谢谢,找到*.CSPROJ并像xml一样解析它们看起来是最简单的解决方案。