Я не могу прочитать мой файл конфигурации из другого приложения - PullRequest
0 голосов
/ 02 октября 2018

Я пробовал все возможные способы и до сих пор не могу.В моем первом приложении мой файл конфигурации будет иметь только одну опцию.Мое первое приложение будет только читать его, не более того.

Мое второе приложение будет читать файл конфигурации первого приложения и может вносить изменения.

Это мой app.config:

<?xml version="1.0"?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" 
                      type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >

            <section name="TCambio.Properties.Settings" 
                     type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
                     requirePermission="false" />

        </sectionGroup>
    </configSections>
    <appSettings>
      <add key="thoras" value="3"/>
    </appSettings>
</configuration>

И чтобы прочитать ключевые слова, во втором приложении я делаю следующее:

    ConfigurationFileMap fileMap = new ConfigurationFileMap(strfilenamepath);
    Configuration configuration = ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
    try
    {
        string value = configuration.AppSettings.Settings["thoras"].Value;
        MessageBox.Show(value);
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error loading file. " + ex.Message);
    }

Но я получил следующую ошибку:

Невозможно привести объект типа 'System.Configuration.DefaultSection' к типу 'System.Configuration.AppSettingsSection'

1 Ответ

0 голосов
/ 02 октября 2018

Проблема, с которой вы столкнулись, связана с использованием метода OpenMappedMachineConfiguration в ConfigurationManager.Используется для доступа к файлу .config уровня machine , а не для конкретного приложения.

Если вы обновите свой код до:

var fileMap = new ExeConfigurationFileMap
{
    ExeConfigFilename = strfilenamepath
};
var configuration = ConfigurationManager.OpenMappedExeConfiguration(
                        fileMap, ConfigurationUserLevel.None);

, чтобывместо этого вы получаете доступ к конфигурации для приложения , вы должны обнаружить, что вызов на MessageBox.Show теперь будет успешным и покажет номер «3».

...