繁体   English   中英

将 XML 文件加载到 MAUI 项目

[英]Load XML file to MAUI project

我正在尝试从 XML 文件加载并在一开始就将其从项目中的资源/原始文件夹解析到 MAUI 应用程序,以便任何类和屏幕都可以访问此已解析的 XML 文件。

public static MauiApp CreateMauiAppAsync()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
            });


        string path;

        Device.BeginInvokeOnMainThread(async () =>
        {
            path = await ReadResources();
            List<Siren> sirens = ParseXML(path);
        });        

        return builder.Build();
    }

    private static Task<string> ReadResources()
    {
        var stream = FileSystem.OpenAppPackageFileAsync("file.xml");
        var reader = new StreamReader(stream.Result);

        Task.Run(() =>
        {
            return reader.ReadToEnd();
        });

        throw new FileLoadException();
    }
...

我在 my.csproj 文件<MauiAsset Include="Resources\Raw\*" />中有这行代码,在App.xaml中我有这个:

...
<ResourceDictionary Source="Resources/Styles/Styles.xaml" />
<ResourceDictionary Source="Resources/Raw/file.xml" />
...

以及默认字体。

这个程序的错误是:

Resource "Resources/Raw/file.xml" not found

我是 MAUI 的新手,我需要知道如何在应用程序开始时解析 XML,以便其他类可以访问数组中已解析的 XML。

您可以查看这篇关于如何在 C# 中反序列化 xml 文档的文章。您还将在 Microsoft C# 文档中找到很多好的资源。 由于 .NET MAUI 使用 .NET 6,您会发现与您找到的任何代码都具有显着的兼容性。您可以查看这篇文章如何从文件加载 XML (LINQ to XML)作为参考。

要包含来自 Resources/Raw 的文件,我不使用 ResourceDictionary,我在 my.csproj 中只有以下内容:

<ItemGroup>
<MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

这会复制 Raw 目录中的所有文件(包括 Raw 下的文件夹结构),以便我可以使用 OpenAppPackageFileAsync 访问它们。 然而,出于某种原因,偶尔也会在 the.csproj 的更下方结束一行,其中包含针对特定文件的删除,例如:

<ItemGroup>
    <MauiAsset Remove="Resources\Raw\file.xml" />
</ItemGroup>

如果我不删除那些,我会得到一个 Resource not found 错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM