Monodroid:我应该在哪里放置配置设置?

时间:2013-01-18 14:28:05

标签: configuration xamarin.android xamarin.mobile

来自Miguel de Icaza

  

我们使用更适合移动设备的库配置文件,因此我们删除了不必要的功能(如整个System.Configuration堆栈,就像Silverlight一样)。

经过多年的.NET开发,我习惯于将配置设置存储在web.configapp.config文件中。

  • 使用Mono for Android时,我应该在哪里设置配置?
    • 如果重要,我还想为不同的构建配置存储不同的配置设置。

4 个答案:

答案 0 :(得分:12)

我可能会建议使用共享首选项和编译符号来管理不同的配置。下面是如何使用首选项文件根据编译符号添加或更改键的示例。此外,您可以创建仅适用于特定配置的单独首选项文件。由于这些密钥并非在所有配置上都可用,因此请确保在使用之前始终对它们进行检查。

var prefs = this.GetSharedPreferences("Config File Name", FileCreationMode.Private);
var editor = prefs.Edit();

#if MonoRelease
editor.PutString("MyKey", "My Release Value");
editor.PutString("ReleaseKey", "My Release Value");
#else
editor.PutString("MyKey", "My Debug Value");
editor.PutString("DebugKey", "My Debug Value");
#endif

editor.PutString("CommonKey", "Common Value");
editor.Commit();

答案 1 :(得分:3)

我们当前的项目遇到了完全相同的问题。 我的第一个冲动是将配置放在一个sqlite键值表中,但后来我的内部客户提醒我配置文件的主要原因 - 它应该支持简单的编辑
因此,我们创建了一个XML文件并将其放在那里:

string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);

使用以下属性访问它:

public string this[string key]
    {
        get
        {
            var document = XDocument.Load(ConfigurationFilePath);
            var values = from n in document.Root.Elements()
                       where n.Name == key
                       select n.Value;
            if(values.Any())
            {
                return values.First();
            }
            return null;
        }
        set
        {
            var document = XDocument.Load(ConfigurationFilePath);
            var values = from n in document.Root.Elements()
                       where n.Name == key
                       select n;
            if(values.Any())
            {
                values.First().Value = value;
            }
            else
            {
                document.Root.Add(new XElement(key, value));
            }
            document.Save(ConfigurationFilePath);
        }
    }
}

通过单例类我们调用 Configuration ,因此对于.NET开发人员来说,它与使用app.config文件非常相似。可能不是最有效的解决方案,但它可以完成工作。

答案 2 :(得分:1)

有一个以Xamarin为中心的AppSetting读者:https://www.nuget.org/packages/PCLAppConfig 对于持续交付非常有用(所以像octopus这样的部署服务器允许使用存储在cd服务器上的值来改变每个环境的配置文件)

https://www.nuget.org/packages/PCLAppConfig有一个以Xamarin为中心的AppSetting阅读器 它对于持续交付非常有用;

按以下方式使用:

1)将nuget包引用添加到pcl和平台项目中。

2)在PCL项目中添加app.config文件,然后在所有平台项目中添加链接文件。对于Android,请确保将构建操作设置为“AndroidAsset&#39;”,对于UWP,将构建操作设置为“内容&#39;”。添加设置键/值:<add key="config.text" value="hello from app.settings!" />

3)在每个平台项目上初始化ConfigurationManager.AppSettings,紧跟在&#39; Xamarin.Forms.Forms.Init&#39;之后。声明,iOS上的AppDelegate,Android中的MainActivity.cs,UWP / Windows 8.1 / WP 8.1中的应用程序:

ConfigurationManager.Initialise(PCLAppConfig.FileSystemStream.PortableStream.Current);

3)阅读您的设置:ConfigurationManager.AppSettings["config.text"];

答案 3 :(得分:0)

ITNOA

也许PCLAppConfig可以帮助您在Xamarin.Forms PCL项目或其他Xamarin项目中创建和阅读app.config

对于不同构建模式(如发布和调试)中的不同配置,您可以在app.config上使用Configuration Transform