ConfigurationManager и AppSettings в универсальном (UWP) приложении

Я хотел бы сохранить ключ API в файле конфигурации без проверки его в исходном элементе управления и прочитать данные в своем приложении UWP.

Общим решением является сохранение ключа в файле .config(например, app.config или web.config) и доступ к нему следующим образом:

var apiKey = ConfigurationManager.AppSettings.Get("apiKey");

Я работаю над универсальным приложением (UWP) и не могу получить доступ к пространству имен System.Configuration, содержащему ConfigurationManager.

Как я могу получить доступ к AppSettings в приложении UWP? В качестве альтернативы, какой лучший способ получить доступ к данным конфигурации в приложении UWP?

Ответы

Ответ 1

В моем конкретном случае использования мне нужно было использовать внешний файл, который не отслеживается с помощью элемента управления источником. Существует два способа доступа к данным из файлов ресурсов или конфигурации.

Один из них - открыть и проанализировать конфигурационный файл. Для файла sample.txt с Строить действие Content ( Копировать в каталог вывода не имеет значения), мы можем прочитать его с помощью

var uri = new System.Uri("ms-appx:///sample.txt");
var sampleFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uri);

или

var packageFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
var sampleFile = await packageFolder.GetFileAsync("sample.txt");

за которым следует

var contents = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);

В качестве альтернативы мы можем использовать Ресурсы. Добавьте новый проект в проект под названием resourcesFile.resw. Чтобы получить доступ к данным, используйте:

var resources = new Windows.ApplicationModel.Resources.ResourceLoader("resourcesFile");
var token = resources.GetString("secret");

Я написал более подробный ответ в сообщении в блоге Пользовательские файлы ресурсов в UWP

Ответ 2

Я думаю, что то, что вы называете "ApiKey", является статическим ключом, который API дает вам для создания токена доступа. Если это так, возможно, лучший способ добиться этого - создать статический класс из исходного элемента управления с этим значением внутри него, что-то вроде этого:

public static class MyCredentials
{
    public static string MyApiKey = "apiKey";
}

Затем вы легко получаете доступ к этому значению из своего кода:

var myApiKey = MyCredentials.MyApiKey;

Если вы хотите сохранить значения в текстовом файле, вам придется писать/читать его вручную, используя классы StorageFile и FileIO.

Вместо этого, если "ApiKey" означает токен динамического доступа, лучшим решением является использование ApplicationDataContainer, как сказано.

Ответ 3

Это старый вопрос, но вот мое решение:

  • Создайте частичный класс Config.cs (например) со всеми необходимыми вам свойствами
  • Добавьте частичный метод void Init()
  • Вызовите Init в конструкторе
  • Создайте другой файл Config.partial.cs с помощью метода void Init(), заполнив все ваши свойства

-> Используйте #if DEBUG/#else/#endif для переключения с Debug/Release -> Используйте exclude Config.partial.cs из Github, чтобы не импортировать его в хранилище

Теперь это скомпилировать и не в хранилище В качестве альтернативы вы можете установить в Config.cs стандартные (не секретные) данные.

Config.cs:

public partial class Config
{

  public Config()
  {
      Init();
  }

  partial void Init();

  public string ApiKey{ get; private set; }= "DefaultValueAPIKEY";
}

Config.partial.cs

public partial class Config 
{

  partial void Init()
  {
#if DEBUG

    this.ApiKey = "DebugAPIKEY";

#else

    this.ApiKey = "ReleaseAPIKEY";

#endif
  }
}

Ответ 4

Вам не нужно создавать файл конфигурации. UWP имеет встроенное решение для хранения локальных настроек/конфигураций. Проверьте этот учебник:

https://msdn.microsoft.com/en-us/library/windows/apps/mt299098.aspx

Используя ApplicationDataContainer, вы сможете получить значение по ключу:

Object value = localSettings.Values["exampleSetting"];