我正在编写一个实用程序来更改 csproj 文件的程序集名称。我知道 csproj 本质上是 XML,所以 XPath 应该可以工作。事实上,我可以让它为某些信息工作。这是我的代码:
var xmlDoc = new XmlDocument();
xmlDoc.Load(file);
XmlNamespaceManager mgr = new XmlNamespaceManager(xmlDoc.NameTable);
mgr.AddNamespace("x", xmlDoc.DocumentElement.NamespaceURI);
XmlNode node = xmlDoc.SelectSingleNode("//x:PropertyGroup//AssemblyName", mgr);
node.Value = newValue;
xmlDoc.Save(file);
但是,node
为空。我也试过用"//x:PropertyGroup[1]//AssemblyName"
没用。如果我只是尝试发现"//x:PropertyGroup"
它会正常工作,那么我假设我的问题是并非每个 PropertyGroup 节点都有一个 AssemblyName 节点。
我正在根据该线程中的建议使用 NamespaceManager,并且我已经能够按照此处的建议通过 Xlinq 检索 AssemblyName 值,但我需要更新该值,而不仅仅是读取它。
我错过了什么?