visual-studio - 如何在构建过程中检查引用

标签 visual-studio msbuild tfsbuild

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

比方说,引用只能:

  • 项目引用
  • 来自 ....\Lib\
  • 来自 ....\Lib2\

不允许任何其他路径。

我希望在 TFS 上构建期间进行此验证或(和)作为 checkin 规则。有什么办法可以实现吗?

我可能能够编写 Visual Studio 扩展来深入研究 EnvDTE 对象。但这是后备计划。

最佳答案

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

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

  3. 如果不包含,则该事件出错。您可以在事件中编写以下代码来使构建出错。

context.TrackBuildError("fix the reference issues!!!");

关于visual-studio - 如何在构建过程中检查引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22459997/

相关文章:

visual-studio - UWP 的访问权限

msbuild - Nant 删除任务不会删除 msbuild 后的文件

c# - 在 FAKE MSBuild 任务中定义预处理器符号

tfsbuild - TFS 2015 - 删除构建工件

build-automation - 使 TFS 2010 Build 自定义变得简单的工具

tfs - TeamBuild 和 Web 部署项目

visual-studio - "GetReferenceNearestTargetFrameworkTask"未找到任务

asp.net-mvc - 在并非每个人都安装 Mindscape 扩展的团队中使用 SASS

visual-studio - 如何更改默认打开文件对话框路径

c# - 找不到错误 MSB4226 MSBuild.Community.Tasks.Targets