0

我正在编写一个实用程序来更改 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 值,但我需要更新该值,而不仅仅是读取它。

我错过了什么?

4

1 回答 1

0

似乎这是通过评论解决的:

只是猜测,但 AssemblyName 不会也在此 XPath 中由 x 表示的命名空间中://x:PropertyGroup//AssemblyName。即(不知道数据)我打赌它应该是 //x:PropertyGroup//x:AssemblyName – dkackman

于 2012-05-08T01:00:10.270 回答