클래식 ASP 페이지와 ASP.NET 페이지가 혼합된 웹 사이트에서 사용할 데이터 액세스 구성 요소를 개발 중이며, 구성 설정을 관리할 좋은 방법이 필요합니다.
사용자 정의 ConfigurationSection
을 사용하고 싶고, ASP.NET 페이지의 경우 이 방법이 잘 작동합니다. 그러나 컴포넌트가 클래식 ASP 페이지에서 COM 상호 운용을 통해 호출될 때, 컴포넌트는 ASP.NET 요청의 컨텍스트에서 실행되지 않으므로 web.config에 대한 지식이 없습니다.
구성 관리자에게 임의의 경로(예: 내 어셈블리가
/bin폴더에 있는 경우
..\web.config)에서 구성을 로드하도록 지시할 수 있는 방법이 있나요? 만약 있다면, 기본
ConfigurationManager.GetSection이 내 사용자 정의 섹션에 대해
null`을 반환하면 내 구성 요소가 그 경로로 돌아갈 수 있다고 생각합니다.
이에 대한 다른 접근 방식은 환영합니다!
이렇게 해보세요:
System.Configuration.ConfigurationFileMap fileMap = new ConfigurationFileMap(strConfigPath); //Path to your config file
System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
또 다른 방법은 재지정입니다 기본값입니다 환경 구성 파일 경로.
내가 찾을 수 있는 최선의 방법은 가장 적합한 솔루션을 사소한 경로를 비사양 구성파일입니다 로드형, 특히 정보기술 (it) 의 구성 파일을 첨부하려면 dll.
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", <Full_Path_To_The_Configuration_File>);
예:
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\Shared\app.config");
자세한 내용은 이 블로그 에서 확인하실 수 있습니다.
또한 이 다른 오토메이티드 완료하십시오 업데이트되도록 코드를 사용하여 최상의 솔루션을 보유하고 있습니다. 구성 및 오버클로킹된 '앱' 의 원래 상태로 돌아가기 객체에는 리디스포사블 리셋하려면 it& # 39. 대체하십시오 솔루션이므로 임시 app 구성용 범위지정 유지할 수 있습니다.
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이 섹션 그룹으로 등록되지 않았으므로 일반 채널을 통해 거의 액세스 할 수 없음을 알 수 있습니다.
이 문제를 해결하기 위해 제가 찾은 두 가지 방법이 있습니다. 첫 번째는 제가 좋아하지 않는 방법인데, 예를 들어 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>
그 후 웹 애플리케이션 자체가 올바르게 실행되는지 확실하지 않지만 섹션 그룹에 올바르게 액세스할 수 있습니다.
두 번째 해결책은 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 디자이너가 의도 한대로 이러한 함수를 사용하지 않습니다. 그러나 이것은 저에게 효과가있는 것 같습니다.
이쉬마일의 답변에 더하여, OpenMappedMachineConfiguration()
메서드는 항상 Configuration
객체를 반환합니다. 따라서 로드되었는지 확인하려면 HasFile
속성을 확인해야 하며, 여기서 참이면 파일에서 가져온 것입니다.
It 에 대한 예외 던지고 다음 아프스팅스 액세스하면 속성:
>. # 39, & # 39 System.Configuration.DefaultSection& 유형의 캐스트 객체에는 수 없습니다. # 39, & # 39, System.Configuration.AppSettingsSection& 입력할 수 있습니다.
System.Configuration.ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = "YourFilePath";
System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
내가 말을해야합니다 호스팅된 .nET 구성 값을 제공한 콤프로랑 다음과 같습니다.
A 클래스 라이브러리 닷넷 (.net) 기반 컴포넌트 호출되는 / 호스팅된 ms word. 내가 만든 윈워d.렉세이콘피그 구성 값을 제공할 수 있는 내 컴포넌트용, C:\Program Files\Microsoft Office\OFFICE11 폴더에서는. 전통적인 .net 과 구성으로의 like You do 값을 읽을 수 있어야 합니다.
string sMsg = System.Configuration.ConfigurationManager.AppSettings["WSURL"];
(ASP.NET) 를 사용하여 웹콘피그라티온만거:
var config = WebConfigurationManager.OpenWebConfiguration("~/Sites/" + requestDomain + "/");
(..)
config.AppSettings.Settings["xxxx"].Value;