我已经阅读了另一个问题并将答案应用于我的代码,但它仍然不起作用。
我使用 xml 读取 csproj 文件以在其正文中读取/写入某些内容。 如果有人关心,这是我的 csproject 文件!
我的代码:
static void Main(string[] args)
{
string file = @"D:Projectsvn_longnxLearnSvnRevisionConsoleApp1WindowsFormsApp1WindowsFormsApp1.csproj";
XmlDocument xdoc = new XmlDocument();
xdoc.Load(file);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable);
nsmgr.AddNamespace("default", "http://schemas.microsoft.com/developer/msbuild/2003");
XmlElement root = xdoc.DocumentElement;
XmlNode node = root.SelectSingleNode("Project/PropertyGroup/ApplicationVersion",nsmgr);
Console.WriteLine(node.Value);
}
此虚拟代码失败:
static void Main(string[] args)
{
string file = @"D:Projectsvn_longnxLearnSvnRevisionConsoleApp1WindowsFormsApp1WindowsFormsApp1.csproj";
XmlDocument xdoc = new XmlDocument();
xdoc.Load(file);
XmlElement root = xdoc.DocumentElement;
XmlNode node = root.SelectSingleNode("Project/PropertyGroup/ApplicationVersion");
Console.WriteLine(node.Value);
}
使用XDocument
和关联的对象比使用较旧的XmlDocument
位要容易得多。此外,您可能因为命名空间而跌倒。相反,请尝试以下代码:
var doc = XDocument.Load(@"D:Projectsvn_longnxLear...WindowsFormsApp1.csproj");
var ns = XNamespace.Get("http://schemas.microsoft.com/developer/msbuild/2003");
var applicationVersionElements = doc.Element(ns + "Project")
.Descendants(ns + "PropertyGroup")
.Descendants(ns + "ApplicationVersion");
foreach (var element in applicationVersionElements)
{
Console.WriteLine(element.Name);
}
这只是如何获取该特定元素以演示其易用性的一种方法。
请注意,您可能需要添加using System.Xml.Linq;