Я пытаюсь создать свою собственную библиотеку наиболее часто используемых методов / кода. Метод, над которым я сейчас работаю, предполагает чтение всех пар (значение, ключ) из предоставленного пользователем раздела из файла конфигурации и запись их в регистратор. Когда я преобразовал код в метод и переместил его в отдельный файл, я обнаружил проблему, связанную с расположением App.config .
Итак, у меня есть App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="General" type="System.Configuration.NameValueSectionHandler"/>
<section name="Generalxxxxxxxxxxxxx" type="System.Configuration.NameValueSectionHandler"/>
</configSections>
<General>
<add key="ApplicationName" value="Configuration Example Project"/>
<add key="Language" value="CSharp"/>
<add key="SecretKey" value="012345"/>
</General>
<Generalxxxxxxxxxxxxx>
<add key="ApplicationName" value="Configuration Example Project"/>
<add key="Language" value="CSharp"/>
<add key="SecretKey" value="012345"/>
</Generalxxxxxxxxxxxxx>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
</configuration>
Из которого я мог прочитать все пары (ключ, значение), просто используя следующий код. В этом случае, когда все было в одном файле, мне не нужно было указывать местоположение App.config .
var general = ConfigurationManager.GetSection("General") as NameValueCollection;
if (applicationSettings.Count == 0)
{
Console.WriteLine("Application Settings are not defined");
}
else
{
foreach (var key in general.AllKeys)
{
Console.WriteLine(key + " = " + applicationSettings[key]);
}
}
Я нашел способ передать местоположение, но теперь могу t sectionLoad как NameValueCollection из-за ошибки преобразования, поэтому я не могу использовать AllKeys метод.
public static Tuple<string, string> LogSaveConfig(string location, string sectionName)
{
//var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var config = ConfigurationManager.OpenExeConfiguration(location);
var sectionLoad = config.GetSection(sectionName);
return Tuple.Create("key", "value"); //just temporary
}
Также я сделал некоторую отладку в "sectionLoad" и единственное место, где я мог найти пары (ключ, значения), было необработанным XML:
Мой вопрос, как я могу получить пары (ключ , значение), когда я вызываю файл конфигурации через метод, который является частью отдельной библиотеки? Моя цель - набрать MyLib.LoggerDefined.LogSaveConfig(location, section);
, который будет регистрировать пары (ключ, значение) в регистраторе. Также, если мой подход неверен, пожалуйста, дайте мне знать. Спасибо.