0

我正在尝试以IConfiguration这种方式与 Uno 平台集成:

public class Startup
{
    internal static void Init()
    {
        var assembly = Assembly.GetExecutingAssembly();

        var resourceName = assembly.GetManifestResourceNames()
            .FirstOrDefault(f => f.Contains("appsettings.json"));

        if (!string.IsNullOrEmpty(resourceName))
        {
            using (var s = assembly.GetManifestResourceStream(resourceName))
            {
                //var content = s.ReadToEnd();

                var host = new HostBuilder()
                .ConfigureHostConfiguration(c =>
                {
                    c.AddJsonStream(s);
                })
                .ConfigureServices((c, x) => ConfigureServices(c, x))
                .ConfigureLogging(l => l.AddConsole(abc =>
                {
                    abc.DisableColors = true;
                }))
                .Build();
            }
        }
    }

appsettings.json我在我的共享项目中将其定义为嵌入式资源并始终复制。

使用 UWP 运行时,它会成功运行,但使用 Android 时会失败,并出现以下错误:

System.ArgumentException: '路径必须是绝对的。参数名称:root'

在我的(其他)Xamarin 项目中,它通过以下添加按预期工作:

.ConfigureHostConfiguration(c =>
                {
                    c.AddCommandLine(new string[] { $"ContentRoot={Xamarin.Essentials.FileSystem.AppDataDirectory}" });
                    c.AddJsonStream(stream);
                })

但据我所知,Xamarin Essentials 超出了 Uno 平台的范围......

4

1 回答 1

3

我结束了以下

    var resourcePrefix = "";

#if __IOS__
            resourcePrefix = "UnoApp.iOS.";
#endif
#if __ANDROID__
            resourcePrefix = "UnoApp.Droid.";
#endif
#if WINDOWS_UWP
            resourcePrefix = "UnoApp.";
#endif

            var assembly = IntrospectionExtensions.GetTypeInfo(typeof(Startup)).Assembly;
            Stream stream = assembly.GetManifestResourceStream
                (resourcePrefix + "appsettings.json");

            var conf = new ConfigurationBuilder()
                .AddJsonStream(stream);

            Configuration = conf.Build();

            services.AddSingleton(typeof(IConfiguration), Configuration);
于 2019-12-22T12:03:03.657 回答