[C#] 활성 app.config 파일의 경로를 찾는 방법은 무엇입니까?

이 예외 처리기를 끝내려고합니다.

if (ConfigurationManager.ConnectionStrings["ConnectionString"]==null)
{
    string pathOfActiveConfigFile = ...?
    throw new ConfigurationErrorsException(
       "You either forgot to set the connection string, or " +
       "you're using a unit test framework that looks for  "+
       "the config file in strange places, update this file : " 
       + pathOfActiveConfigFile);
}

이 문제는 nUnit을 사용할 때만 발생합니다.



답변

이 시도

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

그것이 도움이되기를 바랍니다.


답변

엄밀히 말하면, 단일 구성 파일이 없습니다. ASP.NET 1을 제외 하고 내장 ( System.Configuration) 지원을 사용하는 세 개의 구성 파일이있을 수 있습니다 . 머신 구성 외에도 app.exe.config사용자 로밍 및 로컬 사용자.

“전역”구성을 얻으려면 ( exe .config) :

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
                    .FilePath

ConfigurationUserLevel로밍 및 로밍 구성 파일마다 다른 값을 사용하십시오 .


1 하위 폴더 (IIS- 가상 또는 파일 시스템)의 내용 web.config(설정에 따라 다름)이 부모의 항목을 추가하거나 재정의 할 수 있는 완전히 다른 모델이 있습니다 web.config.


답변

NUnit을 사용할 때 null을 반환한다는 의미이면 응용 프로그램의 app.config에있는 ConnectionString 값을 테스트 라이브러리의 app.config에 복사해야합니다.

테스트 로더에 의해 실행될 때, 테스트 어셈블리는 런타임에로드되며 응용 프로그램 구성 파일이 아닌 자체 app.config (컴파일 시간에 testAssembly.dll.config로 변경)를 찾습니다.

실행중인 어셈블리의 위치를 ​​확인하려면

System.Reflection.Assembly.GetExecutingAssembly().Location


답변

파일의 속성을 클릭하고 “항상 복사”로 설정했는지 확인하십시오. 그렇지 않으면 행복한 lil dll과 함께 Debug \ 폴더에 없어서 필요한 위치를 구성하고 더 많은 cowbell을 추가하십시오


답변

단위 테스트 프로젝트가 프로덕션 코드 프로젝트 (물론 DOH)와 관련된 app.config 대신 해당 프로젝트에서 app.config를 참조한다는 것을 처음 알았을 때 방금 Prod 프로젝트의 포스트 빌드 이벤트에 줄을 추가했습니다. app.config가 테스트 프로젝트의 bin 폴더에 복사됩니다.

문제 해결됨

나는 지금까지 이상한 부작용을 발견하지 못했지만 이것이 올바른 해결책인지 확실하지 않지만 적어도 효과가있는 것 같습니다.


답변

내가 본 또 다른 옵션이 여기에 없습니다.

const string APP_CONFIG_FILE = "APP_CONFIG_FILE";
string defaultSysConfigFilePath = (string)AppDomain.CurrentDomain.GetData(APP_CONFIG_FILE);


답변

구성 파일의 위치에 따라 System.Reflection.Assembly.GetExecutingAssembly().Location필요한 작업을 수행 할 수 있습니다.