Версия Clojure:
(defn comb [k l]
(if (= 1 k) (map vector l)
(apply concat
(map-indexed
#(map (fn [x] (conj x %2))
(comb (dec k) (drop (inc %1) l)))
l))))
Использование OpenMappedExeConfiguration
возвращает вам объект «Конфигурация», который вы можете использовать для просмотра конфигурации библиотеки классов (и существующие там настройки переопределят те, с тем же именем в конфигурации основного приложения):
ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = "ConfigLibrary.config";
Configuration libConfig = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
AppSettingsSection section = (libConfig.GetSection("appSettings") as AppSettingsSection);
value = section.Settings["Test"].Value;
Но те настройки, которые уникальны для конфигурации основного приложения и не существуют в собственной конфигурации библиотеки классов, по-прежнему доступны через статический класс ConfigurationManager
:
string serial = ConfigurationManager.AppSettings ["Serial"];
Это все еще работает - конфигурация библиотеки классов скрывает только те настройки, которые находятся внутри ее файла конфигурации; плюс вам нужно использовать экземпляр " libConfig
, чтобы получить доступ к собственным настройкам конфигурации библиотеки классов.
Два мира (main app.
Вы также можете открыть его как XmlDocument и перемещаться по документу с помощью Xpath. ТОГДА всегда есть LinqToXml
var uri = new Uri(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase));
var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = Path.Combine(uri.LocalPath, "MyAssembly.dll.config") };
var assemblyConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);