Сохранение вещей в исполняемый файл приложений (так будет при следующем запуске приложения) в C # - PullRequest
0 голосов
/ 01 марта 2010

Хорошо, так что я знаю о Settings.Properties.Default. * Вещи, но это не то, что я пытаюсь использовать .. Я пытаюсь разработать свой собственный класс, я покажу вам:

public sealed class SettingsHolder<T>
{
   public SettingsHolder(){}
   public T Setting
   {
      get{ /*return setting*/ }
      set( /*store setting*/  }
   }
}

так что тогда я мог бы скомпилировать это в dll, сослаться на него в приложении и сделать что-то вроде этого

SettingsHolder<string> stringHolder = new SettingsHolder<string>();
stringHolder.Setting = "hello world";

и при следующем запуске приложения

string welcome = stringHolder.Setting;

и добро пожаловать следует = "привет мир" .. это вообще возможно? я изначально пытался отобрать фактический класс properties.settings, но безуспешно

Ответы [ 3 ]

3 голосов
/ 01 марта 2010

Платформа настроек .NET / VS уже делает в точности то, что вы указываете на то, что вы пытаетесь сделать, без неуклюжих приведений во время выполнения и универсальных классов. При отсутствии очень веской причины не использовать его, это то, что вы должны использовать. Он уже обрабатывает постоянные настройки уровня пользователя.

Если по какой-то причине вы абсолютно не можете использовать это, либо сохраните настройки непосредственно в файле где-то в пользовательских данных AppData, либо используйте Isolated Storage . Вам придется написать свою собственную модель постоянства для этого.

Если приложение может перезаписать свой собственный исполняемый код на диске , оно вызовет самые разные острые вопросы о безопасности и надежности. Кроме того, ограничения безопасности в Vista и Windows 7 в любом случае будут препятствовать его правильной работе - если это не приложение ClickOnce, оно, вероятно, установлено в папке с программой (т. Е. Program Files), и вам потребуется пользователь с правами администратора для повышения эффективности процесса чтобы заставить его работать.

1 голос
/ 01 марта 2010

Я не думаю, что это возможно. Данные настроек должны храниться где-то, в каком-то файле или базе данных (при компиляции приложения у вас есть файл .exe.config).

0 голосов
/ 01 марта 2010

Когда вы делаете new classname(), вы создаете объект с членами этого класса, инициализированными в памяти их значениями по умолчанию. например если ваш класс SettingsHolder содержит int _n;, он будет инициализирован равным 0. В качестве альтернативы вы можете, конечно, инициализировать переменную-член конкретным значением, например, int _n = 5;

Насколько я помню, это в определении языка, которое поэтому исключает то, что вы предлагаете; что по сути является чем-то вроде «самоизменяющегося кода с состоянием».

Следовательно, do необходимо использовать механизмы для хранения состояния в ваших программах - например, Properties.Settings (который по умолчанию сохраняет файлы конфигурации XML) или DB, например.

Вам не нужно анализировать класс Properties.Settings. Если вы заходите в «Настройки» из меню свойств проекта и добавляете «Пользователь» или «Приложение». Затем к нему можно получить доступ с помощью Properties.Settings.Default.SettingName. Если я правильно помню, вам нужно поручить коду сохранить изменения в свойствах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...