ConfigurationManager ищет разные файлы в разных системах - PullRequest
2 голосов
/ 15 августа 2010

Я использую диспетчер конфигурации самым простым способом:

Чтение:

ConfigurationManager.AppSettings["Foo"]

Запись:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["Foo"].Value = value;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");

Проблема в том, что после установки приложенияна разных машинах - некоторые ищут файл: «My.Application.exe.config», другие - «My.Application.config» (то же самое, без «.exe»)

ДругойИнтересная деталь в том, что после установки VS на проблемных машинах - все работает нормально.

И мой вопрос: а? !!?Есть идеи?

1 Ответ

0 голосов
/ 23 августа 2010

Спасибо за ответы, ваши ссылки были очень полезны.Поскольку это проблема .NET (как описано в приведенных выше ссылках), я решил ее с другой стороны, чем предполагалось: поскольку мой файл конфигурации огромен и требует операций чтения и записи, я использую специальный класс для его обработки- configurationFileHelper.

Я добавил статический конструктор к этому классу, в котором я запрашиваю ожидаемое имя файла и, при необходимости, переименовываю существующий файл, чтобы он соответствовал ему:

    static configurationFileHelper()
    {
        try
        {
            string fullFilename = Application.ProductName + ".exe.config";
            string expectedFilename = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath;
            if (!File.Exists(expectedFilename) && (File.Exists(fullFilename))
                    File.Move(fullFilename, expectedFilename);
        }
        catch { ; }
    }

Надеюсь, это кому-нибудь пригодится ...

...