2010-06-05 75 views
1

我們創建具有makefileproj關鍵字vcproj文件,這樣我們就可以在VS.使用我們自己的編譯我的問題是,使用C#,你怎麼看「C++」,從以下vcproj文件:閱讀與C#的.vcproj文件

<?xml version="1.0" encoding="Windows-1252"?> 
<VisualStudioProject 
ProjectType="Visual C++" 
Version="8.00" 
Name="TestCSProj" 
ProjectGUID="{840501C9-6AFE-8CD6-1146-84208624C0B0}" 
RootNamespace="TestCSProj" 
Keyword="MakeFileProj" 
> 
<Platforms> 
    <Platform 
    Name="x64" 
    /> 
    <Platform 
    Name="C++"  ===> I need to read "C++" 
    /> 
</Platforms> 

我用XmlNode的,並得到高達第二平臺:

String path = "C:\\blah\\TestCSProj\\TestCSProj\\TestCSProj.vcproj"; 
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
XmlDocument xmldoc = new XmlDocument(); 
xmldoc.Load(fs); 
XmlNodeList oldFiles = xmldoc.GetElementsByTagName("Platform"); 
XmlAttribute name = oldFiles[1].Attributes[0]; 
Console.WriteLine(name.Name); 

這將打印名稱,但我需要「C++」。我如何閱讀?

非常感謝你提前

+0

你爲什麼不簡單調試它,放置一個斷點上Console.WriteLine命令()線和mousehover名變量...你會看到,你可以擁有所有的屬性,而且很容易找到一個與輸出作爲「C++」 ... – balexandre 2010-06-05 19:17:40

+0

你是知道的.vcproj在VS2010不再存在? – 2010-06-05 19:33:07

+0

真的嗎?沒有VS2010的vcproj文件?所以他們與另一個文件代替它或取出vcproj文件中的所有togeether? – Dula 2010-06-07 17:59:21

回答

0

使用name.Value

+0

是的,也可以。謝謝 – Dula 2010-06-07 18:00:46

1

您可以用Value屬性訪問屬性的值:

Console.WriteLine(name.Value); 

甚至更​​好,通過名稱而非索引,這是更短和更可靠的獲得它:

Console.WriteLine(((XmlElement)oldFiles[1]).GetAttribute("Name")); 

該方法GetAttribute直接返回值作爲一個字符串。

+0

當我嘗試這樣做,它提供了以下錯誤: ERROR1「System.Xml.XmlNode」不包含「的getAttribute」 \t 的定義,但我確實發現了下面的代碼工作: Console.WriteLine (name.InnerText); – Dula 2010-06-07 17:58:15

+0

@Dulantha:嗯。似乎Attributes集合可用,但GetAttribute不可用。這很奇怪。我修改了我的代碼以添加必要的演員。 – 2010-06-07 20:15:22