Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Использование ConfigurationManager для загрузки конфигурации из произвольного расположения
Я разрабатываю компонент доступа к данным, который будет использоваться на веб-сайте, содержащем смесь классических страниц ASP и ASP.NET, и мне нужен хороший способ управления его настройками конфигурации.
Я хотел бы использовать пользовательский ConfigurationSection, и для страниц ASP.NET это отлично работает. Но когда компонент вызывается через COM interop с классической страницы ASP, он не работает в контексте запроса ASP.NET и поэтому не имеет никакого представления о web.config.
Есть ли способ сказать ConfigurationManager , чтобы просто загрузить конфигурацию из произвольного пути (например, ..\web.config , если мой assembly находится в папке /bin )? Если есть, то я думаю, что мой компонент может вернуться к этому, если по умолчанию ConfigurationManager.GetSection возвращает null для моего пользовательского раздела.
Любые другие подходы к этому были бы приветствованы!
Другим решением является переопределение пути к файлу конфигурации среды по умолчанию.
Я считаю, что это лучшее решение для загрузки конфигурационного файла non-trivial-path, а именно лучший способ прикрепить конфигурационный файл к dll.
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", <Full_Path_To_The_Configuration_File>);
Пример:
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\Shared\app.config");
Более подробную информацию можно найти в этом блоге .
Кроме того, этот другой ответ имеет отличное решение, дополненное кодом для обновления
конфигурация приложения и объект IDisposable , чтобы сбросить его обратно в исходное состояние. С этим
решение: вы можете сохранить область действия временной конфигурации приложения:
using(AppConfig.Change(tempFileName))
{
// tempFileName is used for the app config during this context
}
Ответ Ишмаэля обычно работает, однако я нашел одну проблему, которая заключается в том, что использование OpenMappedMachineConfiguration , похоже, теряет ваши унаследованные группы разделов от machine.config. Это означает, что вы можете получить доступ к своим собственным пользовательским разделам (а это все, что требуется OP), но не к обычным системным разделам. Например, этот код не будет работать:
ConfigurationFileMap fileMap = new ConfigurationFileMap(strConfigPath);
Configuration configuration = ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
MailSettingsSectionGroup thisMail = configuration.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup; // returns null
В принципе, если вы поставите часы на configuration.SectionGroups, вы увидите, что system.net не зарегистрирован как SectionGroup, поэтому он практически недоступен по обычным каналам.
Есть два способа, которые я нашел, чтобы обойти это. Первое, что мне не нравится, - это повторно реализовать группы системных разделов, скопировав их из machine.config в свой web.config.
<sectionGroup name="system.net" type="System.Net.Configuration.NetSectionGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<sectionGroup name="mailSettings" type="System.Net.Configuration.MailSettingsSectionGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="smtp" type="System.Net.Configuration.SmtpSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</sectionGroup>
</sectionGroup>
Я не уверен, что само веб-приложение будет работать правильно после этого, но вы можете правильно получить доступ к sectionGroups.
Второе решение-вместо этого открыть ваш web.config как конфигурацию EXE, которая, вероятно, ближе к своей предназначенной функции в любом случае:
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap() { ExeConfigFilename = strConfigPath };
Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
MailSettingsSectionGroup thisMail = configuration.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup; // returns valid object!
Я осмелюсь сказать, что ни один из представленных здесь ответов, ни мой, ни Ишмаэля, не использует эти функции так, как это было задумано дизайнерами .NET. Но, похоже, это работает на меня.
Я предоставил значения конфигурации для word hosted .nET Compoent следующим образом.
Компонент библиотеки классов .NET вызывается/размещается в MS Word. Чтобы предоставить значения конфигурации моему компоненту, я создал winword.exe.config в папке C:\Program Files\Microsoft Office\OFFICE11. Вы должны уметь читать значения конфигураций, как это делается в традиционных системах .NET.
string sMsg = System.Configuration.ConfigurationManager.AppSettings["WSURL"];
Принятый ответ неверен!!
При обращении к свойству AppSettings возникает следующее исключение:
Невозможно привести объект типа 'System.Configuration.DefaultSection' к типу 'System.Configuration.AppSettingsSection'.
Вот правильное решение:
System.Configuration.ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = "YourFilePath";
System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
Это должно сделать трюк :
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", "newAppConfig.config);
Источник: https://www.codeproject.com/Articles/616065/Why-Where-and-How-of-NET-Configuration-Files