Заставить консольное приложение C # распознавать вручную измененные изменения в файле .exe.config - PullRequest
0 голосов
/ 17 декабря 2018

Я успешно написал консольное приложение C #, которое собирает .XML или .ZIP файлы из разных мест и копирует их в один пункт назначения.Эти местоположения сохраняются в настройках в качестве пользовательских настроек (например, "Folder01 C:\Data1\" и "Folder02:\Data2").Как вы, вероятно, уже знаете, при создании проекта в папке /bin/Debug создается файл [ProjectName].exe.config.

Теперь проблема в том, что я не могу заставить консольное приложение распознавать любые изменения, внесенные в файл .exe.config.Скажем, я хочу добавить "Folder 03 C:\Data3\" к настройкам или отредактировать "Folder02" путь к "C:\DataEdited\", консольное приложение по-прежнему будет циклически перебирать настройки, которые изначально были установлены в коде («Folder01 C: \ Data1 \» и «Папка02 C: \ Data2 \ ").

Я также заметил, что консольное приложение все еще работает даже после удаления файла .exe.config, как будто оно вообще не полагается на файл.Я хотел бы внести изменения без необходимости открывать проект в Visual Studio и редактировать локально.

Возможно ли это?

РЕДАКТИРОВАТЬ:

В ответ на запрос созданных мною настроек и кода для получения путей к папкам см. Изображениеизображение ниже:

See Settings here Вот код:

string[] acceptedExtensions = new[] { ".xml", ".zip" };
string[] settingsToSkip = new[] { "RootFolder", "ArchiveFolder" };

// Collect data
var filteredSettings = Properties.Settings.Default.Properties
    .Cast<SettingsProperty>()
    .Where(p => !settingsToSkip.Contains(p.Name));

FilterSettings собирает Folder01, Folder02, Folder03 и Folder04 и я перебираю их, чтобы найти файлы с acceptExtensions .

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Как я сделал это в своем производственном коде, я добавил к своему App.config с помощью Visual Studio и сделал так, чтобы он имел формат:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
        <add key="AConnection" value="127.0.0.1"/>
        <add key="Folder01" value="L:\Path\To\A\Thing"/>
        <add key="Folder02" value="L:\Path\To\ASecond\Thing"/>
        <add key="Folder03" value="L:\Path\To\AThird\Thing"/>
        <add key="Folder04" value="L:\Path\To\AFourth\Thing"/>
  </appSettings>
</configuration>

Где <add key="" value=""> sкак бы вы ни назвали их, а value s - это путь к правильному файлу.


Назначение:

Затем вы можете назначить их переменным:

string conStr = ConfiurationManager.AppSettings["AConnection"];
string strFolder1 = ConfigurationManager.AppSettings["Folder01"];
string strFolder2 = ConfigurationManager.AppSettings["Folder02"];
string strFolder3 = ConfigurationManager.AppSettings["Folder03"];
string strFolder4 = ConfigurationManager.AppSettings["Folder04"];
0 голосов
/ 17 декабря 2018

Полагаю, вы ожидали эту функцию в c # ConfigurationManager.Возможно, вы удалили * .exe.config после запуска вашего приложения.* .exe.config не блокируется и не требуется после запуска приложения, если только вы не вызовете метод configurationmanager.refreshsection ().

Перезагрузка конфигурации без перезапуска приложения с использованием ConfigurationManager.RefreshSection

https://docs.microsoft.com/en-us/dotnet/api/system.configuration.configurationmanager.refreshsection?view=netframework-4.7.2

Поднимите палец и отметьте его, если он вам помог!

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