.DLL에 대한 .NET 구성 파일을 작성하는 것은 쉬운 일이 아닙니다. .NET 구성 메커니즘에는 앱을 쉽게 업그레이드 / 업데이트하고 설치된 앱이 서로 구성 파일을 짓밟 지 않도록 보호하기 위해 많은 기능이 내장되어 있습니다.
DLL 사용 방법과 응용 프로그램 사용 방법에는 큰 차이가 있습니다. 동일한 사용자에 대해 동일한 시스템에 여러 응용 프로그램 사본이 설치되어 있지 않을 수 있습니다. 그러나 일부 .NET DLL을 사용하는 100 개의 서로 다른 앱이나 라이브러리가있을 수 있습니다.
하나 개의 사용자 프로파일 내 응용 프로그램의 다른 복사본을 별도로 설정을 추적 할 필요가 거의 없다 반면, 그건 아주 당신이 서로 공유 구성에 DLL의 다른 사용법을 모두 원하는 것 같지는. 이러한 이유로 "일반"방법을 사용하여 Configuration 개체를 검색하면 반환 한 개체가 특정 어셈블리가 아닌 실행중인 App Domain의 구성에 연결됩니다.
앱 도메인은 코드가 실제로있는 어셈블리를로드 한 루트 어셈블리에 바인딩됩니다. 대부분의 경우 이는 .DLL을로드 한 기본 .EXE 어셈블리입니다. 응용 프로그램 내에서 다른 응용 프로그램 도메인을 스핀 업할 수 있지만 해당 응용 프로그램 도메인의 루트 어셈블리에 대한 정보를 명시 적으로 제공해야합니다.
이 때문에 라이브러리 특정 구성 파일을 작성하는 절차는 그리 편리하지 않습니다. 그것은 당신이 특정 어셈블리에 연결되지 않은 임의의 휴대용 설정 파일을 만드는 데 사용하는 것과 같은 과정이지만있는 당신은 부와 구성 요소 메커니즘 등 생성이 수반 구성, .NET의 XML 스키마를 사용하려는 ExeConfigurationFileMap
객체를 구성 파일을 저장할 위치를 식별하기 위해 데이터를로드 한 다음을 호출 ConfigurationManager
합니다. OpenMappedExeConfiguration
새 Configuration
인스턴스 로 엽니 다 . 이 것입니다 자동 경로 생성 메커니즘에 의해 제공되는 버전의 보호에서 당신을 잘라.
통계적으로 말하면, 사내 환경에서이 라이브러리를 사용하고있을 것이므로 한 컴퓨터 / 사용자 내에서 여러 앱을 사용하지는 않을 것입니다. 그러나 그렇지 않은 경우 명심해야 할 것이 있습니다. 참조하는 앱에 관계없이 DLL에 단일 전역 구성 파일을 사용하는 경우 액세스 충돌에 대해 걱정해야합니다. 라이브러리를 참조하는 두 개의 앱이 각각 자체 Configuration
개체가 열린 상태 에서 동시에 실행되는 경우 변경 사항을 저장하면 다음에 다른 앱에서 데이터를 검색하거나 저장하려고 할 때 예외가 발생합니다.
이 문제를 해결하는 가장 안전하고 간단한 방법은 DLL을로드하는 어셈블리도 자체에 대한 정보를 제공하거나 참조 어셈블리의 App Domain을 검사하여 감지하는 것입니다. 이를 사용하여 DLL을 참조하는 각 앱에 대해 별도의 사용자 구성 파일을 유지하기위한 일종의 폴더 구조를 만듭니다.
당신이 경우 특정 당신이 참조하는 위치에 상관없이 당신의 DLL에 대한 전역 설정이없는하려면, 당신은 그것을위한 당신의 위치를 결정하지 않고 .NET보다는 자동으로 적절한 일을 파악해야합니다. 또한 파일에 대한 액세스 관리에 적극적이어야합니다. Configuration
인스턴스를로드하거나 저장하는 동안 인스턴스를 유지하고 가능한 한 많이 캐시해야합니다. 바로 앞을 열고 즉시 버립니다. 마지막으로 라이브러리를 사용하는 앱 중 하나에서 파일을 편집하는 동안 파일을 보호하려면 잠금 메커니즘이 필요합니다.