2010-02-09 3 views
6

내 asp.net 앱은 일반적인 구성을 위해 web.config를 사용하고 있습니다. 또한 일부 데이터 객체를 연결 문자열로 매핑하는 섹션이 있으며 그 섹션은 수천 줄에 이릅니다. 그 섹션을 다른 설정 파일 인 "dataMappings.config"로 옮기고 싶습니다. 그래서 web.config를 대량 업로드하지 마십시오 - 설정 파일에 접근하는 표준 메커니즘이 있습니까? 별도의 설정 파일에서 설정 읽기

은 외부 파일 경로를 가리킬 수 있습니다 configSource 정의 할 수 있습니다, 각각의 섹션에서 안드레이

답변

10

을 주셔서 감사합니다.

<connectionStrings configSource="myConnectionStrings.Config" /> 
<appSettings configSource="myAppSettings.Config" /> 

가 그냥가 브라우저에 표시 할 수 있기 때문에 .xml 파일 확장자를 사용하지 않도록합니다 다음은 간단한 예입니다. .config은 웹 서버에서 서비스하지 않습니다.

당신의 구성 부분이 여전히 Web.config의 (따라서 외부 파일을 가리키는)에 정의되어 있기 때문에, 당신은 정상 경로를 통해이 정보에 액세스 할 수 있습니다 (필요에 따라 WebConfigurationManager.AppSettings, WebConfigurationManager.GetSection, ConfigurationManager, 또는 사용자 정의 섹션 핸들러)

+0

맞춤 섹션을 사용하면 작동합니까? 아니면 configSource 속성을 지원하기 위해 커스텀 섹션 코드에서 뭔가를해야합니까? – Andrey

+0

+1 - 좋은 답변, 나를 이길! –

+0

@Andrey : .NET 2.0 이상의 모든 ** ConfigurationSection에서 작동합니다. –

1

공유 DLL에서 구성 도우미를 사용하고 프로젝트를 편집하고 설정 탭을 설정하여 Settings.Properties.Default 물건을 사용하는 DLL에서 app.config 파일을 사용했습니다. 다시 컴파일하지 않고 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"); 
} 
관련 문제