Я столкнулся с проблемой при переносе некоторых наших проектов .Net Framework на .Net Core. После переноса, если в проекте есть файл app.config И файл Settings.settings, я получаю сообщение об ошибке каждый раз, когда открываю проект или просматриваю свойства проекта.
После некоторого расследования мне удалось воспроизвести проблему без переноса — просто создав приложение .Net Core Windows Forms, а затем добавив app.config и settings.settings следующим образом:
Использование Visual Studio 2019 версии 16.7.3 (ошибка также возникает в более ранних версиях):
- Создайте новый проект Приложение Windows Forms (.Net Core) .Net Core 3.1.
- В среде IDE щелкните правой кнопкой мыши проект в Обозревателе решений и выберите Добавить | Новый элемент...
- Выберите файл конфигурации приложения и нажмите «Добавить».
- Перейдите в раздел Свойства проекта и перейдите на вкладку Настройки.
- Нажмите Этот проект не содержит файла настроек по умолчанию. Нажмите здесь, чтобы создать его.
- Добавьте строковую пользовательскую настройку с именем Setting со значением test.
- Построить приложение.
- Закройте все окна проекта.
- Перейдите в «Свойства проекта» и перейдите на вкладку «Настройки».
В этот момент я вижу ошибку:
Произошла ошибка при чтении файла app.config. Файл может быть поврежден или содержать недопустимый XML.
Эта ошибка теперь отображается каждый раз, когда я открываю проект или захожу в свойства проекта.
Как я могу предотвратить появление этой ошибки, кроме удаления App.Config?
Обратите внимание, что, несмотря на ошибку, настройки работают корректно — их можно читать и записывать во время выполнения. Это просто раздражающее и слегка тревожное сообщение об ошибке, от которого я бы хотел избавиться!
[EDIT] Я отправил это в Microsoft как ошибку здесь: https://github.com/dotnet/sdk/issues/13478
app.config
. Вместо ограниченныхconfig
вариантов, основанных на среде, или хаков с преобразованием, вы можете легко получить отладку, выпуск, производство, разработку и т. д. в любой комбинации, которую вы хотите. Классы конфигурации со строгой типизацией тривиальны. Чтобы сделать то же самое сapp.config
, вам нужно было скомпилировать класс в отдельной библиотеке и включить его вapp.config
. - person Panagiotis Kanavos   schedule 10.09.2020SomeOtherProject.Settings
в классы, чтобы получить доступ к настройкам, достаточноIConfiguration
интерфейсов. Нет сломанного кода, если вы рефакторите проекты - person Panagiotis Kanavos   schedule 10.09.2020Settings
в каждой папке выиграет гораздо больше от упрощения, предлагаемого Microsoft.Extensions.Configuration. - person Panagiotis Kanavos   schedule 10.09.2020