Uno 平台:读取 Android 项目中的 JSON 配置文件
Uno Platform: Reading JSON configuration file in Android project
我正在尝试以这种方式将 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: 'The path must be absolute. Parameter name: root'
在我的(其他)Xamarin 项目中,它按预期工作,添加了以下内容:
.ConfigureHostConfiguration(c =>
{
c.AddCommandLine(new string[] { $"ContentRoot={Xamarin.Essentials.FileSystem.AppDataDirectory}" });
c.AddJsonStream(stream);
})
但据我所知,Xamarin Essentials 不在 Uno 平台的范围内...
我得到了以下结果
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);
我正在尝试以这种方式将 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: 'The path must be absolute. Parameter name: root'
在我的(其他)Xamarin 项目中,它按预期工作,添加了以下内容:
.ConfigureHostConfiguration(c =>
{
c.AddCommandLine(new string[] { $"ContentRoot={Xamarin.Essentials.FileSystem.AppDataDirectory}" });
c.AddJsonStream(stream);
})
但据我所知,Xamarin Essentials 不在 Uno 平台的范围内...
我得到了以下结果
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);