9

米格尔德伊卡萨

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

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

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

4 回答 4

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();
于 2013-01-18T17:11:08.420 回答
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 文件非常相似。可能不是最有效的解决方案,但它可以完成工作。

于 2013-01-31T13:40:44.940 回答
1

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

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

使用如下:

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

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

3) 在每个平台项目上初始化 ConfigurationManager.AppSettings,就在“Xamarin.Forms.Forms.Init”语句之后,在 iOS 中的 AppDelegate、Android 中的 MainActivity.cs、UWP/Windows 8.1/WP 8.1 中的 App 上:

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

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

于 2016-08-15T03:57:59.050 回答
0

ITNOA

也许PCLAppConfigapp.config可以帮助您在 Xamarin.Forms PCL 项目或其他 Xamarin 项目中创建和读取。

对于不同构建模式下的不同配置,例如发布和调试,您可以使用Configuration Transform on app.config

于 2016-07-22T12:48:50.950 回答