26 c# xpath reference csproj .net-3.5
有没有人知道以编程方式读取VS2008 csproj文件中的引用列表的方法?MSBuild似乎不支持此功能.我试图通过将csproj文件加载到XmlDocument来读取节点,但XPath搜索不返回任何节点.我正在使用以下代码:
System.Xml.XmlDocument projDefinition = new System.Xml.XmlDocument();
projDefinition.Load(fullProjectPath);
System.Xml.XPath.XPathNavigator navigator = projDefinition.CreateNavigator();
System.Xml.XPath.XPathNodeIterator iterator = navigator.Select(@"/Project/ItemGroup");
while (iterator.MoveNext())
{
Console.WriteLine(iterator.Current.Name);
}
Run Code Online (Sandbox Code Playgroud)
如果我可以获取ItemGroups列表,我可以确定它是否包含参考信息.
Pav*_*aev 39
XPath应该是/Project/ItemGroup/Reference
,你忘记了命名空间.我只是使用XLINQ - 处理命名空间XPathNavigator
是相当混乱的.所以:
XNamespace msbuild = "http://schemas.microsoft.com/developer/msbuild/2003";
XDocument projDefinition = XDocument.Load(fullProjectPath);
IEnumerable<string> references = projDefinition
.Element(msbuild + "Project")
.Elements(msbuild + "ItemGroup")
.Elements(msbuild + "Reference")
.Select(refElem => refElem.Value);
foreach (string reference in references)
{
Console.WriteLine(reference);
}
Run Code Online (Sandbox Code Playgroud)
基于@Pavel Minaev的回答,这对我有用(注意添加的.Attributes行来读取Include属性)
XNamespace msbuild = "http://schemas.microsoft.com/developer/msbuild/2003";
XDocument projDefinition = XDocument.Load(@"D:\SomeProject.csproj");
IEnumerable<string> references = projDefinition
.Element(msbuild + "Project")
.Elements(msbuild + "ItemGroup")
.Elements(msbuild + "Reference")
.Attributes("Include") // This is where the reference is mentioned
.Select(refElem => refElem.Value);
foreach (string reference in references)
{
Console.WriteLine(reference);
}
Run Code Online (Sandbox Code Playgroud)