gpt4 book ai didi

c# - 从 MSBuild xml 获取 ItemGroup 集合及其项目

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:53 24 4
gpt4 key购买 nike

我想通过在 dotnet c# 中解析以下 xml 来了解 ItemGroup 的名称。我尝试了各种选择,但无法得到它。基本上我想知道有 ItemGroup ,它可以更多。无论如何我们可以加载此 xml 并获取 ItemGroup 的列表及其名称。

这里我希望 ItemGroup 名称为“cssfile_individual”,cssfile_individual2

    <Project xmlns="http://schemas.microsoft.com/developer/MsBuild/2003">

<UsingTask TaskName="CssCompressorTask" AssemblyFile="Yahoo.Yui.Compressor.Build.MsBuild.dll" />
<UsingTask TaskName="JavaScriptCompressorTask" AssemblyFile="Yahoo.Yui.Compressor.Build.MsBuild.dll" />

<PropertyGroup>

</PropertyGroup>

<Target Name="Minify">

<ItemGroup>
<cssfile_individual Include="test1.css"/>
<cssfile_individual Include="test2.css"/>
<cssfile_individual Include="test3.css"/>
<cssfile_individual Include="test3.css"/>
</ItemGroup>

<ItemGroup>
<cssfile_individual2 Include="test1.css"/>
<cssfile_individual2 Include="test2.css"/>
<cssfile_individual2 Include="test3.css"/>
<cssfile_individual2 Include="test3.css"/>
</ItemGroup>

</Target>
</Project>

我试过如下

 XmlDocument objXML = new XmlDocument();
objXML.Load(path);

然后开始生 child 。

示例 XML 如下所示

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/MsBuild/2003">
<UsingTask TaskName="CompressorTask"
AssemblyFile="D:\JsCssCompressor\JsCssCompressor\bin\Yahoo.Yui.Compressor.Build.MsBuild.dll" />

<Target Name="MyTaskTarget">
<ItemGroup>
<JavaScriptFiles Include="C:\Work\Purchase_Flow\eBizSol_App\Release\WebSites\Websites\McAfee.Consumer.Website\UIDesign\LegacySite\Scripts\FlexDashboard\AddDevice.js"/>
</ItemGroup>
<CompressorTask
JavaScriptCompressionType="YuiStockCompression"
JavaScriptFiles="@(JavaScriptFiles)"
ObfuscateJavaScript="True"
PreserveAllSemicolons="False"
DisableOptimizations="Nope"
EncodingType="Default"
DeleteJavaScriptFiles="false"
LineBreakPosition="-1"
JavaScriptOutputFile="C:\Work\Purchase_Flow\eBizSol_App\Release\WebSites\Websites\McAfee.Consumer.Website\UIDesign\LegacySite\Scripts\FlexDashboard\MAA2.0.js"
LoggingType="ALittleBit"
ThreadCulture="en-us"
IsEvalIgnored="false"
/>
</Target>
</Project>

最佳答案

使用 LINQ to XML

XDocument objXML = new XDocument();
objXML.Load(path);

您的 LINQ 代码将如下所示

var ItemGroups = from IG in objXML.Descendants("ItemGroup")
select new {
Children = LG.Descendants()
};

//Print Results
string str = "";

foreach (var IG in ItemGroups){
str += "Item Group Name: " + IG.Children[0].Name + Environment.NewLine;
foreach (var IGValue in IG.Children){
str += " " + IGValue.Attribute("Include").Value + Environment.NewLine;
}
}

引用资料

更新

这是一个示例应用程序。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace testapp_xdocument_linq
{
class Program
{
static void Main(string[] args)
{

XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003";
XDocument X = XDocument.Load("C:\\Users\\Brian\\Documents\\Visual Studio 2012\\Projects\\testapp_xdocument_linq\\testapp_xdocument_linq\\testapp_xdocument_linq.csproj");

var PropertyGroups = from PG in X.Descendants(ns + "PropertyGroup") select PG;

//Print Results
foreach (var element in PropertyGroups)
{
Console.WriteLine("First Descendant Name: " + element.Descendants().First().Name + Environment.NewLine);
}

Console.ReadLine();
}
}
}

这是一个全新的 C# 控制台应用程序。我正在加载项目自己的 .csproj 文件。

我无法针对您的示例 XML 执行此代码。我怀疑这是因为它破坏了 http://schemas.microsoft.com/developer/msbuild/2003 定义的模式.

关于c# - 从 MSBuild xml 获取 ItemGroup 集合及其项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15035922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com