System.IO.FileLoadException при использовании русских букв в файле настроек

#c# #.net-framework-4.8

#c# #.net-4.8

Вопрос:

Я создал консольное приложение net framework 4.8, которое использует некоторые настройки из файла конфигурации. Я создаю это приложение в конфигурации выпуска и запускаю его на своем сервере.

Проблема в том, что когда я использую некоторые русские буквы в значениях файла настроек — приложение не запускается с System.IO.FileLoadException. Could not load file or assembly 'System.Threading.Tasks.Extensions, Version=4.2.0.0 исключением. Когда я удаляю все русские буквы из файла настроек, он работает отлично.

Когда я запускаю это приложение из Visual Studio, оно работает, независимо от того, какие буквы использовались в файле настроек.

Основной раздел файла настроек выглядит следующим образом

 <configSections>
        <sectionGroup name="Settings">
            <section name="TestSettings" type="Foo.Bar.TestSettingsSection, Foo" />
        </<sectionGroup>
</configSections>
<Settings>
       <TestSettings>VALUE</TestSettings>
</Settings>
  

Итак,
<TestSettings>значение</TestSettings> сбой и <TestSettings>value</TestSettings> работает.

То, что считывается из конфигурации, выглядит следующим образом (это всего лишь пример кода, не будет работать с моим примером TestSettings)

 public class TestSettingsSection : ConfigurationSection
    {
        [ConfigurationProperty("Sources")]
        public AppSettingSectionElement Sources
        {
            get => this["Sources"] as AppSettingSectionElement;
            set => this["Sources"] = value;
        }

        public IOptions<TestSettings> CreateOptionsFromConfig()
        {
            var settings = Sources.InnerText.Split(',')
                                 .Select(x => x.Trim())
                                 .ToArray();

            return Options.Create(new TestSettings
                                      {
                                          Sources = settings
                                      });
        }
    }
  
 public class AppSettingSectionElement : ConfigurationElement
    {
        public string InnerText { get; private set; }

        protected override void DeserializeElement(XmlReader reader, bool serializeCollectionKey)
        {
            InnerText = reader.ReadElementContentAsString();
        }
    }
  

Для меня это действительно странно, я даже не могу понять, какую дополнительную информацию я могу предоставить.
Итак, любые идеи, почему это может произойти, будут оценены.

Комментарии:

1. Попробуйте добавить в настройки XmlReader параметр отключить проверку символов: Настройки XmlReaderSettings = новые настройки XmlReaderSettings();. Контрольные символы = false;

2. Спасибо. reader Объект, переданный DeserializeElement методу, не имеет установщика для настроек.

3. XmlReader reader = XmlReader. Создать («имя файла», настройки);

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

5. Поместите настройки, в которых создается ваш читатель.