Как я могу использовать свойства.Настройки при развертывании моего приложения C # Winforms с помощью NSI?

#c# #.net #winforms #settings #nsis

#c# #.net #winforms #Настройки #nsi

Вопрос:

Я написал приложение на C # с использованием Winforms и пытаюсь использовать встроенные свойства.Настройки (область действия пользователя) для запоминания состояния пользователя между запусками программы. Когда приложение развертывается с помощью встроенного в Visual Studio Build> Publish, по-видимому, этот файл помещается в локальную папку Appdata. Однако я хочу использовать NSI для создания исполняемого файла программы. Я могу поместить файл ProgramName.exe.config в локальные AppData с помощью скрипта NSIS, но мое приложение, похоже, не считывает его. Пользовательские настройки не сохраняются.

Возможно ли это вообще? Или я должен использовать свой собственный метод (база данных или написать свои собственные настройки xml) для хранения пользовательских настроек?

Комментарии:

1. Пользовательские настройки сохраняются не в .exe.config (там определены значения по умолчанию), а в user.config файле. Проверьте это: var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); . Смотрите config.HasFile (файл присутствует) и config.FilePath путь к файлу (включает имя файла). Путь изменяется в зависимости от информации, которую вы сохранили в Assembly Information диалоговом Project->Properties->Application окне (или вручную, в коде).

2. @Jimi Интересно. У меня не было системы. Ссылка на конфигурацию импортирована вообще. Код, ссылающийся на ConfigurationManager, также недействителен, если я не нахожусь в режиме выпуска (не отладки). Я не знаком с таким поведением. Путь таков: C:UsersmilaAppDataLocalProgramNameProgramName.exe_Url_lsmwr1o5wnkk1e4dsuyvs2totzfyilr41.0.0.0user.config Что это означает для меня при использовании NSIS для развертывания проекта? Нужно ли мне извлекать этот файл с моего компьютера и включать его в установку?

3. Хммм, я не могу получить файл, потому что он еще не существует. Я предполагаю, что это какой-то заполнитель при запуске из Visual Studio. Есть ли ресурс, на который вы могли бы указать мне, чтобы лучше понять, как это работает?

4. Проблема со ссылкой на ConfigurationManager была решена путем удаления ссылки и ее повторного импорта в режиме отладки.

Ответ №1:

Хорошо, я заставил его работать с NSI. Файл App.config имеет свойство с именем «Копировать в выходной каталог», для которого по умолчанию установлено значение «Не копировать». Я нашел эту информацию здесь: https://learn.microsoft.com/en-us/dotnet/framework/configure-apps /

Я узнал, где будет создан файл user.config, с помощью @Jimi, добавив System .Конфигурация в качестве ссылки, а затем получение пути с помощью:

 var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
  

Файл user.config создается не при установке приложения, а при первом вызове следующего:

 Properties.Settings.Default.Save();
  

В NSI нет ничего особенного, что разработчик должен делать.