我正在编写一个实用程序,它将更改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节点。
我根据this thread中的建议使用了NamespaceManager,并且我已经能够通过建议here通过XLinq检索AssemblyName值,但我需要更新值,而不仅仅是读取它。
我错过了什么?
答案 0 :(得分:0)
似乎通过评论解决了这个问题:
只是猜测,但是在这个XPath:// x:PropertyGroup // AssemblyName中,AssemblyName也不会出现在x表示的命名空间中。即(不知道数据)我敢打赌它应该是// x:PropertyGroup // x:AssemblyName - dkackman