나는 다음과 같은 프로젝트가 :.NET의 .config 지옥
- MVC를
- 콘솔 응용 프로그램
- 클래스 라이브러리는
- Windows가 형성 응용 프로그램
- COM 라이브러리
이러한 모든 애플리케이션은 단일 구성 파일을 사용하십시오. 아득히 app.config 파일은 web.config가 웹 프로젝트 용인 경우 Windows, 콘솔 응용 프로그램 및 클래스 라이브러리 용입니다.
이러한 모든 프로젝트에서 동일한 구성에 액세스 할 수 있어야합니다. 컴퓨터 구성 파일을 사용하는 것이 좋지만 항상 액세스 할 수있는 것은 아니므로 구성 파일이 우리 솔루션 내에 있어야합니다.
구성 파일의 빌드 방법을 완전히 이해하지 못했습니다. 현재 다음과 같은 간단한 프로젝트를 작성했습니다 :
- 구성 파일 제공을 위해 저장할 클래스 라이브러리. A는 이것을 반영하여 이것을 시도했습니다.
- 클래스 라이브러리에서 app.config를 읽어야하는 Windows 응용 프로그램입니다. 나는 다음과 같은 코드를 실행하면
나는 시험 값으로 설정 파일을 얻을 것으로 기대 : 내가 대신 얻는 것은 빈 응용 프로그램 설정 파일입니다
_applicationSettings = ConfigurationManager.OpenExeConfiguration(
System.Reflection.Assembly.GetAssembly(typeof(WCSConfiguration)).Location
).AppSettings;
.
클래스 라이브러리는 다음의 App.config를 가지고 : 나는 현재 실행되고있어 코드의 어셈블리를 반환 할 것으로 예상 .GetExecutingAssembly()
방법을 사용하여 시도
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="TestTextKey" value="TestTextValue"/>
</appSettings>
</configuration>
. 이것은 작동하지 않고 대신 Windows 응용 프로그램의 어셈블리를 반환했습니다.
GetAssembly(type(WCSConfiguration))
이 올바른 어셈블리를 반환했지만 구성 파일이 bin/debug 디렉토리에 없습니다.
나는 근본적으로 잘못된 것을하고 있거나 Microsoft가 충분히 유연하게 만들지 못했다고 생각합니다. 나는 또한 설명을 위해 MSDN을 검색하려고 시도했지만 이것은 잘 설명되어 있지 않다.
COM 라이브러리에서 설정 파일을 사용할 수 있는지 여부가 확실치 않아 COM을 굵게 표시했습니다. 우선 다른 프로젝트를 시작하고 싶습니다.
나는 이것이 많은 정보라는 것을 알고 있습니다. 어떤 도움이라도 대단히 감사 할 것입니다. 이전에 우리는 레지스트리를 사용하기로 결정했으나 일부 시나리오에서는 레지스트리에 대한 액세스가 불가능하기 때문에이 방법은 불쾌한 것으로 판명되었습니다.또한 우리는 이제 응용 프로그램의 여러 버전을 가지고 나뭇 가지 사이를 전환하는 것은 반 한 시간 작업 :(
이
편집 감사입니다 : 내가 DLL의 설정 섹션을 추가하는 경우
가의 app.config하기를 즉,이 설정은 해당 응용 프로그램에서만 사용할 수 있습니다. 제가 틀렸다고 정정하십시오. 제가 제공 한 예제는 축소 된 버전입니다. 총 10 개의 Windows 응용 프로그램, 하나의 MVC 프로젝트 및 클래스 범위가 있습니다. 이 라이브러리는 모두 해당 구성을 사용해야합니다.
구성 설정은 대부분 연결 문자열이며 데이터베이스에 속하지 않는 조회 값이며 다른 작은 설정은 거의 없습니다. 이 시점에서 주요 관심사는 연결 문자열입니다. 각 릴리스가 다른 데이터베이스를 가리키는 응용 프로그램의 사소한 릴리스가 거의 없습니다.
나는 이것을 꺼내고 싶습니다. 온라인에서 게시 할 수 있고 같은 문제를 겪고있는 다른 사람들이 시간을 보내지 않을 것입니다.
IMO : 자신의 구성 파일의 위치를 저장하려면 App.config와 Web.config를 모두 사용하십시오.
구성을 제공하기 위해 읽기/쓰기 구성 및 DLL에 간단한 XML serializer를 작성합니다.
COM 개체는 길쭉한 이야기이며 COM DLL에서 App.config 또는 Web.config를 사용할 수 없으므로 "해킹"으로 구현되었습니다.
임의의 구성 파일을 여는 데 http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.openmappedexeconfiguration.aspx를 사용해 보셨나요? 당신이 가리킬 수있는 공유 위치에 공유 구성 파일이 있다고 생각합니다. –
나는 이것을 사용하려했다. OpenMappedExeConfiguration은 클래스 라이브러리에 대한 설정을 반환한다고 생각했던 OpenMappedMachineConfiguration보다 실행 파일에서 작동하지만 둘 다 작동하지 않습니다. –
OpenMappedExeConfiguration은 모든 종류의 구성에서 작동합니다. 실행 파일에서 작동한다는 것을 이해하지 못합니까? 내 webapplications에 대한 구성 파일을 여는 데 매일 사용합니다. –