Обновление конфигурационного файла и обновление значений в приложении - PullRequest
4 голосов
/ 15 июля 2010

В настоящее время я обновляю несколько настроек в довольно большом файле * .exe.config через исполняемый файл * .exe, используя XLinq для навигации по каталогам и чтения / записи значений.Проблема с обновлением этого способа заключается в том, что изменения вступают в силу только после перезапуска исполняемого файла, но я бы хотел, чтобы изменения вступили в силу мгновенно.Есть ли способ сообщить исполняемому файлу о необходимости перезагрузить файл * .exe.config после внесения изменений?

Вся помощь приветствуется и спасибо заранее!

Экзоскелет для приложения.config

<configuration>
  <system.serviceModel>
    <!-- stuff... -->
    <client>
      <!-- this is the section I changed and want to have updated -->
    </client>
  </system.serviceModel>
</configuration>

РЕДАКТИРОВАТЬ: Одна из причин, по которой я так мало знаю по этому вопросу, заключается в том, что я не создал app.config - он автоматически генерируется чужим кодом.Причина, по которой я должен изменить его, чтобы изменения вступили в силу в приложении, заключается в том, что другая часть кода (к которой у меня нет доступа) вызывает файл конфигурации для получения его данных, но если я не перезагружаюраздел, тогда будут использоваться старые настройки, которые не будут работать в этом приложении.

РЕДАКТИРОВАТЬ2: Если я не могу изменить это динамически, как я могу изменить код, чтобы он мог выполняться динамически?Лучший ответ получает награду ...

Ответы [ 4 ]

1 голос
/ 27 июля 2010
var client = 
 System.ServiceModel.ChannelFactory<ISampleService>(
  System.ServiceModel.Channels.Binding binding, 
  System.ServiceModel.EndpointAddress remoteAddress)

вы также можете подключиться к сервису программным способом и напрямую предоставить WCF необходимую конфигурацию.

при использовании этого вам больше не требуется конфигурация wcf в exe.

https://msdn.microsoft.com/en-us/library/ms576132.aspx

1 голос
/ 24 июля 2010

Есть 2 части, чтобы сделать эту работу.1) Обновление правильного файла конфигурации и 2) принуждение .net к перезагрузке изменений.

1) При запуске процесса .net он скопирует существующий файл .config в файл vshost.exe.config.Если вы обновите исходный файл конфигурации после запуска процесса, вы не увидите его в файле vshost.config, пока не перезапустите процесс.Поэтому, чтобы это работало во время выполнения, вам нужно обновить vshost.exe.config, а не файл exe.config.

2) Чтобы заставить .net перезагрузить настройки, вы должны сообщить менеджеру конфигурациичто настройки изменились.Вы можете сделать это с помощью ConfigurationManager.RefreshSection ().

Более подробная информация и несколько примеров кода приведены по адресу: http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/3c365fdb-563e-4b0a-a4b4-df684c2dd908/

1 голос
/ 26 июля 2010

По сути, Microsoft разработала его таким образом (считывая конфигурацию при запуске, а не снова), специально чтобы отговорить вас от этого, потому что файл * .config находится в папке C: \ Program Files, и это должноне может быть записано пользователем без прав администратора.

1 голос
/ 17 июля 2010

Настройки с областью «Пользователь» могут быть легко сохранены и извлечены во время работы приложения. Если ваши настройки относятся к области «Приложение», боюсь, вы не сможете изменить и перезагрузить их без перезапуска приложения. Тогда вам нужно будет применить собственное решение для конфигурации.

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