我正在寻找一种方法来检查解决方案中的所有项目是否都有来自"对"路径。
让我们说,引用只能是:
不允许任何其他路径。
我希望在构建TFS或(和)作为签入规则时进行此验证。有办法怎么做?
我可能能够将Visual Studio扩展写入EnvDTE对象。但这是备份计划。
答案 0 :(得分:1)
我不知道通过静态分析(这似乎是你想要的)强制执行此操作的方法。
但是,通过CI构建设置,它在实践中实现了同样的目的。如果人们在\ bin \ debug中引用了一些东西(这是典型的问题),那么CI构建将无法找到它们,因为它将二进制文件指向另一个目录,CI Build将失败,开发人员将被迫使用正确引用lib。
答案 1 :(得分:1)
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);
浏览每个Reference节点并获取HintPath属性并确保它包含(lib或lib2)。
如果不包含,则将活动错误。您可以在活动中编写以下代码以使构建错误。
context.TrackBuildError(“修复引用问题!!!”);