Чтение настроек из отдельного файла конфигурации
В моем приложении asp.net используется web.config для общей конфигурации. У меня также есть раздел, который отображает некоторые объекты данных в строки подключения, и этот раздел будет состоять из нескольких тысяч строк. Я хочу переместить этот раздел в другой файл конфигурации "dataMappings.config", так что я не разгружаю web.config - существует ли стандартный механизм доступа к этому файлу конфигурации?
Спасибо,
Андрей
Ответы
Ответ 1
В каждом разделе вы можете определить configSource
, который может указывать на внешний путь к файлу. Вот простой пример:
<connectionStrings configSource="myConnectionStrings.Config" />
<appSettings configSource="myAppSettings.Config" />
Просто не забудьте использовать расширение .xml
, так как оно можно просмотреть в браузере. .config
не будет обслуживаться веб-сервером.
Поскольку ваши разделы конфигурации все еще определены в файле web.config(таким образом, указывая на внешние файлы), вы можете получить доступ к этой информации с помощью обычных маршрутов (WebConfigurationManager.AppSettings
, WebConfigurationManager.GetSection
, ConfigurationManager
или обработчиков настраиваемых разделов как необходимо)
Ответ 2
Я использовал помощник конфигурации в общей DLL и файл app.config в DLL, который использует файл Settings.Properties.Default, редактируя проект и настраивая вкладку настроек. Похоже, что значение не читается, если вы не перекомпилируете и не переконфигурируете app.config(в dll) с настройками проекта.
Это работает для меня. Я не помню, где я получил вдохновение. Я просто включаю этот класс в общий проект где-то. позволяет любой DLL вызывать свои собственные настройки, что позволяет вам изменять записи dllFile.dll.config. Я использую это для строк подключения. Предостережение заключается в том, что в этом методе строка соединения должна быть строкой типа, а не специальной строкой соединения.
using System;
using System.Configuration;
namespace Shared
{
public static class ConfigurationHelper
{
public static string GetConfigValue(string keyName)
{
string codebase = System.Reflection.Assembly.GetCallingAssembly().CodeBase;
Uri p = new Uri(codebase);
string localPath = p.LocalPath.ToLowerInvariant();
string executingFilename = System.IO.Path.GetFileNameWithoutExtension(localPath);
string sectionGroupName = "applicationSettings";
string sectionName = executingFilename + ".Properties.Settings";
string configName = localPath + ".config";
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = configName;
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
ConfigurationSectionGroup group = config.GetSectionGroup(sectionGroupName);
ClientSettingsSection section = null;
foreach (ClientSettingsSection sect in group.Sections)
{
if (sect.SectionInformation.Name.Equals(sectionName, StringComparison.InvariantCultureIgnoreCase))
{
section = sect;
break;
}
}
SettingElement elem = section.Settings.Get(keyName);
if (elem == null)
return "";
else
return elem.Value.ValueXml.InnerText.Trim();
}
}
}
//in DLL
void foo()
{
var str = ConfigurationHelper.GetSetting("ConnectionStringProd");
}