Patrick Skelton Ответов: 1

Как остановить двойные записи в файле myapp.exe.config?


У меня есть стандартное приложение WPF, которое я разрабатываю и запускаю в Windows 10. Я использовал конструктор настроек для создания нескольких настроек, одной пользовательской и одной прикладной.

Проект WPF "верхнего уровня" называется MyApp.WPF', и это задается как имя сборки, так и пространство имен по умолчанию. Когда я смотрю в файл MyApp. exe. config, я нахожу, что каждый параметр имеет две записи, например:

<applicationSettings>
    <MyApp.WPF.Properties.Settings>
        <setting name="SettingOne" serializeAs="String">
            <value>ABC</value>
        </setting>
    </MyApp.WPF.Properties.Settings>
    <MyApp.WPF>
        <setting name="SettingOne" serializeAs="String">
            <value>ABC</value>
        </setting>
    </MyApp.WPF>
</applicationSettings>

<userSettings>
    <MyApp.WPF.Properties.Settings>
        <setting name="SettingTwo" serializeAs="String">
            <value>DEF</value>
        </setting>
    </MyApp.WPF.Properties.Settings>
    <MyApp.WPF>
        <setting name="SettingTwo" serializeAs="String">
            <value>DEF</value>
        </setting>
    </MyApp.WPF>
</userSettings>


Насколько я могу судить, вторая запись (та, что с более коротким "MyApp.Пространство имен WPF) кажется совершенно избыточным. Это не проблема, но я хотел бы удалить его, если смогу, или, по крайней мере, понять, почему он там.

Кто-нибудь сталкивался с этим?

Что я уже пробовал:

Я попытался изменить настройки пользователя во время выполнения, и это создает ожидаемую запись в файле /%Username%/MyApp/.../user.config, но это не помогает мне понять, что происходит с основным файлом MyApp.exe.config в корневом каталоге приложения.

Maciej Los

Ну, я бы попробовал скопировать файл настроек и переименовать его (например, MyApp. config_copy). Затем я попытался бы удалить дублированные записи. Дай мне знать, это поможет?

Patrick Skelton

Спасибо за ответ. Я сделал нечто подобное-полностью удалил файл. Когда приложение воссоздает его в процессе сборки, записи снова дублируются.

J. Calhoun

Вы остановили функцию, которую используете для создания файла настроек? Я не знаю, как выглядит ваш код, но похоже, что вы вызываете его несколько раз при запуске, возможно, из-за какого-то наследования, вызывающего конструктор, который создает эти настройки несколько раз?

Patrick Skelton

Спасибо за ответ.

Я не совсем понимаю, где вы предлагаете поставить точку останова. Код генерируется автоматически. Я просто создаю настройки с помощью конструктора настроек. Остальное-магия Microsoft (или это была бы магия, если бы я понимал половину того, что она делает).

J. Calhoun

Приношу свои извинения, я пропустил часть «Конструктор настроек». Однако у меня есть еще один вопрос. Когда вы говорите, что создали одну область действия приложения и одну область действия пользователя, вы используете только дизайнер запускаемого проекта? Возможно ли, что у вас есть эти настройки более чем в одном проекте? Я создал проект и установил в своем стартовом проекте те же настройки, которые вы указали, и он создается правильно, работая над другими способами, чтобы попытаться воссоздать вашу проблему. Кроме того, в файле app.config вы должны увидеть только один набор настроек, если вы отредактировали его вручную и сделали это в дизайнере, что могло вызвать дублирование. Пока все, что мне удалось сделать, это создать одного пользователя и одну настройку приложения, без дубликатов: /

Patrick Skelton

Спасибо за эти предложения.

Ни одно из ваших предложений не оказалось плодотворным, когда я провел расследование. На самом деле тайна только углублялась. Несколько дней назад я экспериментировал с созданием нескольких файлов настроек (в конструкторе) для хранения групп настроек. Затем я выбросил это, и все же эти пространства имен все еще появлялись в файле App.exe.config. Я даже использовал инструмент поиска грубой силы в файлах, способный отображать шестнадцатеричный код, и я не мог найти нигде, где создавались эти пространства имен.

Теперь я это исправил. Я выложил то,что сделал, в ответ.

Спасибо за помощь.

1 Ответов

Рейтинг:
4

Patrick Skelton

В конце концов, только "ядерный" подход, казалось, исправил это.

Я полностью удалил файл настроек, закрыл Visual Studio, удалил все \параметр obj и \мусорное ведро папки, и начал снова. Теперь это приводит к единым значениям в Приложение myapp.exe-файла.конфиг файл.

Я думаю, что вся система, возможно, запуталась из-за того, что я попытался использовать свою собственную папку и пространство имен для файлов настроек. MSDN действительно говорит, что настройки должны быть либо в \Собственности папка проекта или корневая папка ( настройки программы ).