Установите значение в файле конфигурации в приложении Windows Forms C # - PullRequest
1 голос
/ 27 июня 2019

Использование Microsoft Visual Studio Community 2019.

Как задать значение (путь) в файле конфигурации, чтобы его можно было обновить, а затем перезапустить приложение с обновленным значением (без необходимости перекомпиляцииприложение)?

Это устаревший проект, о котором я даже не знаю.Наиболее важным требованием является возможность изменить этот путь без перекомпиляции приложения.Вот что я пробовал до сих пор:

Предварительный шаг:

Чтобы проверить, что это за проект.Исходя из этого вопроса , я проверяю, что файл .csproj содержит:

<OutputType>WinExe</OutputType>

Итак, насколько я понимаю, проект представляет собой Приложение WinForms .

Кроме того, я попытался выполнить поиск для GUID, найденного в файле .csproj:

<ProjectGuid>{B1DD5159-A8E8-4DBE-964F-DB9679F60192}</ProjectGuid>

Но поиск для этого GUID не дает результата, а также не указан в этих двухСписок GUID:

Примечание: Суть вопроса основана на предположении, что этот проект является приложением WinForms.Пожалуйста, дайте мне знать, если это неправильный способ найти тип этого проекта, или даже лучше указать правильный способ сделать это.


Первый шаг:

Чтобы отредактироватьФайл конфигурации, идущий в Solution Explorer, в котором я не могу найти файл .config, но если я проверяю файлы этого проекта (через Windows Explorer), я обнаружил файл app.config.

Я обновляю этот файл вне Visual Studio (я вернусь к этому позже) и добавляю свойство test.Эта модификация выполняется в соответствии со структурой, найденной в файле, без внешнего источника для этой модификации.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="LF10Demo.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <LF10Demo.Properties.Settings>
            <setting name="AutoStepping" serializeAs="String">
                <value>True</value>
            </setting>
            ...
            <setting name="test" serializeAs="String">
                <value>C:\Temp</value>
            </setting>
        </LF10Demo.Properties.Settings>
    </userSettings>
</configuration>

Затем в коде попробуйте получить значение:

var appSettings = System.Configuration.ConfigurationManager.AppSettings;
string value1 = System.Configuration.ConfigurationManager.AppSettings["test"];
string value4 = System.Configuration.ConfigurationSettings.AppSettings.Get("test");

Нетиз которых выводится значение, хранящееся в файле app.config, фактически все это приводит к null.

Затем обновите файл app.config, следуя этому файлу конфигурации в Windows Forms C #Приложение

<?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="test" value="C:\Temp" />
      </appSettings>
    </configuration>

, которое тоже не работало.

Второй шаг

Возвращаясь к модификации app.config, отмените эти модификации и добавьтедругой файл конфигурации (в конце концов, app.config не отображается в обозревателе решений).Это заключается в добавлении нового файла конфигурации app1.config после этого поста , связанного с файлом конфигурации в приложении Windows Forms C # , а также этого Добавление и чтение из файла конфигурации .

Так что после добавления нового файла конфигурации все мои apptemps с System.Configuration.ConfigurationManager.AppSettings приносят null.

Кроме того, при добавлении этого нового файла конфигурации, если я выберу app.config, появится сообщение о том, что

Файл с именем 'App.config' уже завершен...

Итак, в конце концов, проект (каким-то образом) находит этот файл.

Другая связанная информация:

В файле Settings.Designer.cs ifЯ добавляю следующее:

[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("C:\\Temp")]
public string test
{
    get {
        return ((string)(this["test"]));
    }
    set {
        this["test"] = value;
    }
}

И затем с помощью этой строки:

string value8 = Properties.Settings.Default.test;

Возможно получить значение, но это не удовлетворяет требованию, что путь может быть изменен безперекомпиляция приложения.

Другие ссылки по теме:

Это другие ссылки, связанные с добавлением файла конфигурации в проекты Visual Studios, я также пробовал некоторые из этих решений, но без получения ожидаемых результатов:

1 Ответ

1 голос
/ 27 июня 2019

Загляните в каталог bin, и вы увидите файл с именем YourProjectName.exe.config с типом конфигурации XML. Все, что находится в вашем app.config, копируется здесь, когда вы компилируете проект. Вы можете изменить значения в коде следующим образом:

static void UpdateAppSettings(string key, string value)
        {
            var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            var settings = configFile.AppSettings.Settings;
            settings[key].Value = value;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...