我试图用C#编写一些代码来读取*.CSPROJ文件
我的代码如下
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(fullPathName);
XmlNamespaceManager mgr = new XmlNamespaceManager(xmldoc.NameTable);
//mgr.AddNamespace("x", "http://schemas.microsoft.com/developer/msbuild/2003");
foreach (XmlNode item in xmldoc.SelectNodes("//EmbeddedResource") )
{
string test = item.InnerText.ToString();
}
Run Code Online (Sandbox Code Playgroud)
使用调试器我可以看到'fullPathName'具有正确的值,并且加载后的xmldoc具有正确的内容.
xmldoc没有任何"节点",好像内容不被识别为XML.
使用XML编辑器,*.csproj文件验证XML文档.
我哪里错了?
Tho*_*que 57
为什么不使用MSBuild API?
Project project = new Project();
project.Load(fullPathName);
var embeddedResources =
from grp in project.ItemGroups.Cast<BuildItemGroup>()
from item in grp.Cast<BuildItem>()
where item.Name == "EmbeddedResource"
select item;
foreach(BuildItem item in embeddedResources)
{
Console.WriteLine(item.Include); // prints the name of the resource file
}
Run Code Online (Sandbox Code Playgroud)
您需要引用Microsoft.Build.Engine程序集
Ric*_*ard 18
您正在接近添加XmlNamespaceManager,但未在SelectNodes方法中使用它:
XmlNamespaceManager mgr = new XmlNamespaceManager(xmldoc.NameTable);
mgr.AddNamespace("x", "http://schemas.microsoft.com/developer/msbuild/2003");
foreach (XmlNode item in xmldoc.SelectNodes("//x:ProjectGuid", mgr))
{
string test = item.InnerText.ToString();
}
Run Code Online (Sandbox Code Playgroud)
(我切换到搜索不同的元素,因为我的项目没有任何嵌入资源)
为了完整性,这里是XDocument版本,这简化了命名空间管理:
XDocument xmldoc = XDocument.Load(fullPathName);
XNamespace msbuild = "http://schemas.microsoft.com/developer/msbuild/2003";
foreach (var resource in xmldoc.Descendants(msbuild + "EmbeddedResource"))
{
string includePath = resource.Attribute("Include").Value;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18669 次 |
| 最近记录: |