#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. Поместите настройки, в которых создается ваш читатель.