2013-10-07 2 views
3

csproj 파일에서 모든 dll 이름을 가져 오려고하지만 아무 것도 얻을 수 없습니다!C#을 통해 csproj 구문 분석 - ItemGroup을 구문 분석 할 수 없습니다.

var elem = doc.Descendants("Project").Where(t => t.Attribute("ToolsVersion")!=null) 
       .Elements("ItemGroup").Elements("Reference").Where(r => r.Attribute("Include") != null); 
      var attrs = elem.Attributes(); 
      Console.WriteLine(attrs.Count()); 
      foreach (var e in attrs) 
      { 
       Console.WriteLine(e); 
      } 

을 그리고 이것은 내 XML을 csproj 파일입니다 그래서, 내가 LIQ 쿼리와 ItemGroup 태그에서 알 요소를 얻을하려고합니다. 나는 이상한 텍스트를 잘라 냈다.)

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

<ApplicationIcon>icon.ico</ApplicationIcon> 
</PropertyGroup> 
<ItemGroup> 
<Reference Include="System" /> 
<Reference Include="System.ComponentModel.Composition" /> 
<Reference Include="System.Data" /> 
<Reference Include="System.Drawing" /> 
<Reference Include="System.Xml" /> 
<Reference Include="Microsoft.CSharp" /> 
<Reference Include="System.Core" /> 
<Reference Include="System.Xml.Linq" /> 
<Reference Include="System.Data.DataSetExtensions" /> 
<Reference Include="System.Xaml"> 
    <RequiredTargetFramework>4.0</RequiredTargetFramework> 
</Reference> 
<Reference Include="MyProject1" /> 
<Reference Include="MyProject2" /> 
<Reference Include="MyProject3" /> 
</ItemGroup> 
</Project> 

제발, 내가이 이름의 목록을 얻도록 도와주세요! 내가 뭘 잘못 했니?

감사합니다.

+0

관련이긴하지만 (중복은 아님) http://stackoverflow.com/q/3745029/492 –

답변

14

이를 무시하고 : 자손의 기본 네임 스페이스를 설정

xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 

합니다. 그래서 원하는 :

XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003"; 
var elem = doc.Descendants(ns + "Project") 
       .Where(t => t.Attribute("ToolsVersion")!=null) 
       .Elements(ns + "ItemGroup") 
       .Elements(ns + "Reference") 
       .Where(r => r.Attribute("Include") != null); 
+0

감사합니다! .... – user2545071

+0

흠, 그 전에 몰랐어요. 네임 스페이스는 노드에만 추가되지만 속성에는 추가되지 않습니다. 여기에 대한 완벽한 참조가 있습니까? –