2009-10-09 5 views
6

.NET 3.5 DLL에 자체 구성 파일이 있어야합니다. 이 DLL은 많은 다른 응용 프로그램에서 호출 할 수 있으므로 구성 파일에 저장된 정보 (예 : 연결 문자열)는 DLL이 참조 할 수있는 구성 파일에 보관해야했습니다. 내가 원하는 것은 DLL을 사용할 때, DLL 설정 파일이라는 정보를 참조하는 데 사용되는 설정 파일을 "전환"해야한다는 것입니다. 그런 다음 구성 정보를 사용하여 DLL을 완료하면 스위치가 기본값으로 다시 전환됩니다. DLL은 .NET 3.5를 사용하여 작성됩니다. 이 작업을 수행하는 방법을 찾고 있으며 계속 찾는 방법은 exe의 app.config 파일과 정보를 병합하는 방법입니다. 필자의 경우이 DLL을 exe의 app.config 파일을 수정하는 데 사용하는 방법을 모르겠습니다. 이 솔루션은 독립형이어야합니다. 그러나 비즈니스 개체를 포함하는 DLL을 만드는 데 사용되는 내 기본 클래스는 구성 파일에서 연결 문자열 및 기타 정보를 조회 할 예정이므로 그 시간에 내 DLL 구성 파일로 "전환"해야합니다 DLL을 호출하는 EXE 응용 프로그램을 엉망으로 만들지 않도록 액세스 한 다음 다시 전환합니다..NET 3.5 DLL 자체 구성 파일 사용

답변

5

.NET 2.0 이상 구성 시스템은 다음과 같은 기능을 제공합니다. 필요에 따라 특정 구성 파일을로드하십시오. 조금 더 많은 작업이 있지만 작동합니다.

당신은 이런 식으로 뭔가를해야 할 것 :

// set up a exe configuration map - specify the file name of the DLL's config file 
ExeConfigurationFileMap map = new ExeConfigurationFileMap(); 
map.ExeConfigFilename = "ConfigLibrary.config"; 

// now grab the configuration from the ConfigManager 
Configuration cfg = ConfigurationManager 
        .OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); 

// now grab the section you're interested in from the opened config - 
// as a sample, I'm grabbing the <appSettings> section 
AppSettingsSection section = (cfg.GetSection("appSettings") as AppSettingsSection); 

// check for null to be safe, and then get settings from the section 
if(section != null) 
{ 
    string value = section.Settings["Test"].Value; 
} 

당신은 또한 클래스 라이브러리 DLL에 대한 설정이 내장 당신이 그것을 얻을 수있는 위치로 복사되어 있는지 확인해야합니다. 최악의 경우 특정 구성 파일을 지정하고 Visual Studio 속성 창에서 "출력 디렉터리로 복사"속성을 설정하여 출력 디렉터리로 복사해야합니다.

또한 CodeProject에서 .NET 2.0 구성에 대한 Jon Rista의 3 부작 시리즈를 확인해야합니다.

적극 추천, 잘 쓰여진 매우 도움이!

마크

+0

이 방법을 사용하면 유망한 것으로 들립니다. 나는 질문을하지만, 나는 이것을 "실행 취소"해야하지 않습니까? 내 DLL 구성이 조회의 "기본"구성이됩니까? – user31673

+0

아니요 - ConfigurationManager에서 명시 적으로 "구성"개체를 요청해야하며,이 별도의 개체로 작업 할 경우에만 해당 개별 설정을 가져옵니다. –

0

가장 쉬운 대답은 machine.config에 값을 입력하는 것입니다. 그렇게하면 dll을 사용하는 모든 앱은 .net 앱 구성 클래스를 통해 정보에 액세스 할 수 있습니다. 이런 식으로도 특정 응용 프로그램의 값을 절대적으로 재정의해야하는 경우 주 응용 프로그램의 app.config 파일에서 재정의 할 수 있습니다.

1

내장 .Net 구성 시스템을 사용하여이 작업을 수행 할 수 없습니다. 그것은 개별 DLL이 아닌 응용 프로그램 프로세스를 구성하도록 설계되었습니다 (원래대로). 이 문제를 해결하는 올바른 방법은 해당 dll을 "사용"하는 (참조가있는) 실행 가능한 각 응용 프로그램에 대해 app.config 시스템에 dll 구성 설정을 추가하는 것입니다. (또는이 Machine.config에서) 간단히 그는 가 C에서합니다 (은 Machine.config에서 그들을 을 넣어 수행 할 수 있습니다 dll을 uset ALL applictions에 설정이 액세스 할 수 있도록

  • : \ WINDOWS \ 마이크로 소프트. NET \ 프레임 워크 \ V2.0.50727 당신이 그런 식으로하고 싶지 않는 경우에, 당신은 열고, 읽고, FRM은 쓰기 위해 자신의 코드를 작성해야합니다 .Net2.0

에 대한 CONFIG \ 사용자 지정 XML 파일 (또는 사용하도록 선택한 형식)을 사용하여 해당 설정을 압축합니다.

+0

아, 당신은 할 수 있습니다 - 그것은 약간의 일이지만 app.config 스토리만큼 훌륭하고 완벽하지는 않습니다. 대부분의 경우, 나는 동의한다 - 호스트 어플리케이션은 설정을 제공해야한다. 나는 별도의 라이브러리 - 특정 설정이 많은 의미를 가질 수있는 경우를 보았다. –

1

일반적으로 응용 프로그램 수준에서 설정을하면 응용 프로그램 수준에서 해당 설정을 생성 한 다음 라이브러리를 통해 설정을 가져와야합니다. 의존성을 주입하기 위해 초기화에 몇 줄의 코드를 추가하지만 근본적으로 그렇게하려고합니다.

라이브러리의 모든 배포와 함께 dll에 대한 설정 파일을 포함 시키려고한다면 의미 상으로 많은 문제를 일으킬 것입니다. 의미 상 많은 의미를 갖지는 않습니다. .

예를 들어, System.Data를 가져옵니다 ... 연결을 만들 때 System.Data 라이브러리와 나란히 배치 할 연결 문자열에 대한 별도의 구성 파일을 만들지 않고 연결 문자열을 지정합니다. [어쨌든 시스템의 GAC에 있기 때문에 문제가 발생할 수 있습니다.]

0

는이 게시물이 조금 오래 알고,하지만 난 내 2 센트를 던져 싶었어요. 반면 5 월의 경우, 내가 응용 프로그램의 설정이 아닌 DLL을 제공해야합니다 동의하지 않았다. dll 특정 configs 더 바람직한 것 같다 동안 한 상황을 발견했습니다.

우리는 Quartz.NET의 일정 잡기/작업 응용 프로그램을 사용합니다. 우리는 Quartz 서버에 대한 작업을 생성하고 모니터하기위한 인터페이스를 개발했습니다. Quartz.NET의 가장 큰 장점 중 하나는 "작업"프로그램을 만들고이를 DLL로 컴파일 한 다음 Quartz.NET 서버 폴더에 놓은 다음 반사 등을 통해 Quartz가 새 DLL을 사용할 수 있다는 것입니다 설정 파일에 정보가 저장되어 있지 않으면 Quartz 서버에 추가 조정을하지 않아도된다.

구성 파일에 보관해야하는 특정 구성 정보가있는 경우 Quartz 서버에서 Quartz.NET 구성 파일에 저장해야합니다. 우리는 몇 가지 "작업"응용 프로그램을 만들었습니다. 각각의 응용 프로그램은 고유 한 구성 정보를 가지고 있습니다. 그래서 이제 Quartz.NET 구성 파일은 관련이없는 모든 설정으로 흩어져 있습니다. dll 관련 설정 파일을 가지고 있으면 Quartz.NET 서버가 복잡해집니다. 내가 볼 수있는 유일한 다른 옵션은 이러한 개별 설정을 모두 설정 DB 테이블에 추가하는 것입니다. 그러나 코드를 통합하고 유지 관리하기 위해 개별 설정 파일을 사용하는 것이 좋습니다.

그냥 던져서 생각해보세요.

+0

흠 .... 이것은 실제로 대답이 아니지만 통찰력있는 의견을 찾았습니다 ... – nalply