我正在尝试通过以下方式将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
定义为Embedded Resource,并始终复制。
在使用UWP运行时,它可以成功运行,但是在Android上,它将失败,并显示以下错误:
System.ArgumentException:'该路径必须是绝对路径。参数名称:root'
在我的(其他)Xamarin项目中,此添加项可以按预期工作:
.ConfigureHostConfiguration(c =>
{
c.AddCommandLine(new string[] { $"ContentRoot={Xamarin.Essentials.FileSystem.AppDataDirectory}" });
c.AddJsonStream(stream);
})
但是,据我所知,Xamarin Essentials不在Uno平台的范围之内...
答案 0 :(得分:1)
我得出以下结论
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);