从csproj文件中读取引用列表

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)


Sud*_*hra 9

基于@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)