我的asp.net应用程序使用web.config进行常见配置。我还有一个部分将一些数据对象映射到连接字符串,该部分将成千上万行。我想将该部分移动到另一个配置文件“dataMappings.config”,所以我不会批量添加web.config - 是否有访问该配置文件的标准机制?
谢谢你, 安德烈
答案 0 :(得分:11)
在每个部分中,您可以定义configSource
,它可以指向外部文件路径。这是一个简单的例子:
<connectionStrings configSource="myConnectionStrings.Config" />
<appSettings configSource="myAppSettings.Config" />
请确保不要使用.xml
文件扩展名,因为可以在浏览器中查看。
因为您的配置部分仍然在web.config中定义(因此指向外部文件),您可以通过正常路线(WebConfigurationManager.AppSettings
,WebConfigurationManager.GetSection
,ConfigurationManager
访问此信息,或根据需要定制部分处理程序)
答案 1 :(得分:2)
我在共享DLL中使用了配置帮助程序,并在DLL中使用了一个app.config文件,该文件通过编辑项目和设置设置选项卡来使用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");
}