C# 在代码中更改CSProj中的AssemblyName

C# 在代码中更改CSProj中的AssemblyName,c#,xpath,csproj,C#,Xpath,Csproj,我正在编写一个实用程序,它将更改csproj文件的程序集名称。我知道csproj本质上是XML,所以XPath应该可以工作。事实上,我可以让它为某些信息工作。以下是我的代码: var xmlDoc = new XmlDocument(); xmlDoc.Load(file); XmlNamespaceManager mgr = new XmlNamespaceManager(xmlDoc.NameTable); mgr.AddNamespace("x", xmlDoc.DocumentEleme

我正在编写一个实用程序,它将更改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);
但是,节点为空。我还尝试过使用//x:PropertyGroup[1]//AssemblyName,但没有任何效果。如果我只是尝试找到//x:PropertyGroup,它会工作得很好,所以我假设我的问题是不是每个PropertyGroup节点都有AssemblyName节点

我正在根据中的建议使用NamespaceManager,并且我已经能够按照建议通过XLinq检索AssemblyName值,但是我需要更新该值,而不仅仅是读取它


我遗漏了什么?

这似乎可以通过评论解决:


在XPath://x:PropertyGroup//AssemblyName中,AssemblyName只是猜测,但不在x表示的名称空间中。也就是说,在不知道数据的情况下,我打赌它应该是//x:PropertyGroup//x:AssemblyName–dackman

只是猜测,但AssemblyName不会也在XPath://x:PropertyGroup//AssemblyName中由x表示的命名空间中。也就是说,在不知道数据的情况下,我打赌它应该是//x:PropertyGroup//x:AssemblyName是的,就是这样。另外,我不能只做node.Value,我需要做node.FirstChild.Value。谢谢