C # - Открытие Settings.settings получает ошибку о недопустимом xml в app.config (когда добавлен configSource) - PullRequest
7 голосов
/ 01 сентября 2011

Следуя многочисленным примерам, я добавил следующее в свой файл app.config:

Кажется, что все работает, когда я запускаю приложение, но когда я пытаюсь открыть файл Settings.settings, Я получаю сообщение об ошибке:

"Произошла ошибка при чтении файла app.config. Возможно, файл поврежден или содержит недопустимый XML."

Файл Settings.settings открывается, но я получаюаналогичное сообщение об ошибке, если я пытаюсь его сохранить.

Файл App.config:

<configSections>
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
        <section name="test.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
    </sectionGroup>
</configSections>

<userSettings>
    <test.Properties.Settings>
        <setting name="server" serializeAs="String">
            <value />
        </setting>
        <setting name="database" serializeAs="String">
            <value />
        </setting>
        <setting name="g_language" serializeAs="String">
            <value>en-US</value>
        </setting>
        <setting name="timeSchedule1" serializeAs="String">
            <value />
        </setting>
        <setting name="timeSchedule2" serializeAs="String">
            <value />
        </setting>
        <setting name="helpLocation" serializeAs="String">
            <value />
        </setting>
        <setting name="SQLAuthType" serializeAs="String">
            <value>0</value>
        </setting>
        <setting name="SQLLogin" serializeAs="String">
            <value />
        </setting>
        <setting name="SQLPsw" serializeAs="String">
            <value />
        </setting>
        <setting name="defaultTimeZone" serializeAs="String">
            <value />
        </setting>
    </test.Properties.Settings>
</userSettings>

<connectionStrings configSource = "testConnect.config"/>

Ответы [ 9 ]

7 голосов
/ 09 декабря 2011

Мне только что передали проект, который выдавал ту же ошибку при попытке открыть файл Settings.settings:

"Произошла ошибка при чтении файла app.config. Возможно, файл поврежден или содержит недопустимый XML. "

Убедившись, что XML-документ синтаксически правильный (используя http://validator.w3.org),, я удаляю XML-элементы до тех пор, пока ошибка не исчезнет.

В моем случае файл app.config содержал два элемента connectionStrings :

ОШИБКА GENERATES

  • конфигурация
    • ConnectionStrings
      • добавить
    • ConnectionStrings
      • добавить

НЕТ ОШИБКИ.

  • конфигурация
    • ConnectionStrings
      • добавить
      • добавить

Таким образом, похоже, что эта ошибка может быть сгенерирована, когда файл app.Config содержит элементы, которые синтаксически правильны, но логически неверны.

3 голосов
/ 21 мая 2013

У меня такая же проблема.Как и у вас, у меня есть строки подключения в отдельном файле:

<connectionStrings configSource = "testConnect.config"/>

Я не смог найти обходной путь, кроме удаления элемента при работе с настройками.

1 голос
/ 29 мая 2015

Я также использую configSource в элементе connectionStrings. Я думаю, что проблема, с которой я столкнулся, заключалась в том, что я обращался к включенному файлу конфигурации с указанием пути относительно целевого каталога сборки (например, bin \ debug \ ConnectionStrings.config). У меня есть связанный элемент ConnectionStrings.config для копирования в выходной каталог при сборке. Однако VS IDE хочет разрешить его перед сборкой из app.settings вместо bin\debug\program.exe.settings, поэтому я застрял либо с копией этого дополнительного файла конфигурации в каждом проекте (что исключает преимущество), либо с использованием полной квалификации дорожка. Если я буду использовать последний подход, мне нужно будет выразить путь в виде некоторой переменной среды, чтобы файл конфигурации работал на компьютере разработчика и компьютере развертывания. Это может быть выполнимо , но похоже, что .NET фактически не расширит переменные окружения .

Если это поможет, вы можете попробовать проверить app.config по схеме, как описано в https://stackoverflow.com/a/311835/611672. В моем случае, xml проходит проверку, но я все равно получаю сообщение об ошибке.

Кроме того, если у кого-то возникают проблемы с добавлением Code First Migration с этой настройкой (возникает ошибка, что он не может найти connectionStrings.config), это, вероятно, является той же основной причиной.

1 голос
/ 09 января 2013

Я столкнулся с той же ошибкой при ручном переименовании решения, его проектов и пространств имен. Ошибка была вызвана дублированием элементов <section> в узле <sectionGroup name="applicationSettings"> файла App.config. Я не уверен, какое действие вызвало создание дублирующих элементов, но решением было удалить дублирующий элемент.

0 голосов
/ 05 мая 2015
  1. В другом решении VS создайте новый проект с тем же именем и пространством имен, с которым вы работали.
  2. В разделе «Свойства» >> «Настройки для нового проекта» создайте все настройки, которые у вас есть, в том, над которым вы работаете.
  3. Перейдите в новую папку проекта, т.е. C: \ Users \ YourUser \ Documents \ Visual Studio 2022 \ Projects \ ReportsApplication1 \ ReportsApplication1 и скопируйте файл app.config
  4. Вставьте этот файл и замените его в текущем проекте
  5. (Готово)
0 голосов
/ 25 марта 2014

Я слишком поздно могу это сделать, но даже у меня была та же проблема, и, хотя в app.config все выглядело правильно, я получал эту ошибку.После добавления некоторых настроек свойств в файл app.config я пытался отредактировать / открыть файл Settings.settings, и именно тогда я получил эту ошибку.То, что я сделал, я отменил все изменения, внесенные в app.config, и добавил все необходимые значения непосредственно в файл настроек, что решило проблему.Непосредственное добавление значений в app.config создавало проблему.

0 голосов
/ 11 октября 2013
<configuration>
  <connectionStrings>
    <add name=""
  </connectionStrings>
</configuration>

В моем случае у меня было много строк соединения, и одна из строк в <add name> была пустой.У меня также была та же ошибка, что и у Pressacco.Спасибо!

0 голосов
/ 13 апреля 2013

У меня тоже была эта проблема.Кажется, это может быть вызвано множеством «странностей» в вашем файле app.config.

Способ, которым я решил это:

  1. Сделайте резервную копию вашего файла настроек и .csтакже из вашего app.config (на всякий случай)
  2. Удалите элементы configSections, относящиеся к настройкам, например, userSettings из app.config
  3. Удалите разделы applicationSettings или userSettings из app.config
  4. Сохраните свой app.config
  5. Откройте редактор настроек и внесите любое небольшое изменение, сохраните

Если ошибка все еще появляется, начинайте удалять разделы один за другим, пока ненайти дубликат / оскорбительный раздел.

0 голосов
/ 01 сентября 2011

Похоже, файл конфигурации вашего приложения настроен неправильно. Не могли бы вы опубликовать конфигурацию приложения?

...