我正在寻找一种方法来检查解决方案中的所有项目是否都具有来自“正确”路径的引用。
比方说,引用只能:
- 项目引用
- 来自 ....\Lib\
- 来自 ....\Lib2\
不允许任何其他路径。
我希望在 TFS 上构建期间进行此验证或(和)作为 checkin 规则。有什么办法可以实现吗?
我可能能够编写 Visual Studio 扩展来深入研究 EnvDTE 对象。但这是后备计划。
最佳答案
- 在构建定义模板中添加自定义事件。
- 自定义事件搜索所有 .CSPROJ(如果需要,包括其他项目类型)。 示例:
Directory.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)。
如果不包含,则该事件出错。您可以在事件中编写以下代码来使构建出错。
context.TrackBuildError("fix the reference issues!!!");
关于visual-studio - 如何在构建过程中检查引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22459997/