2009-04-15 4 views
9

응용 프로그램을 로컬에서 실행할 때 구성한 위치 (예 : <file value="${LOCALAPPDATA}\TEST\Logs\debug.log" />)에 log4net 로그를 문제없이 씁니다. 그러나 ClickOnce를 통해 응용 프로그램을 배포하면 로그 파일이 작성되지 않습니다.어디에서 Log4net 로그 파일을 ClickOnce 아래에 쓸 수 있습니까?

ClickOnce 애플리케이션은 어디에서 쓸 수 있는지에 대해 제한적이지만 LOCALAPPDATA (예 : C : \ Users \ me \ AppData \ Local)는 공정한 게임이라는 인상하에있었습니다.

아이디어가 있으십니까?

ClickOnce를 가진

답변

15

, 폴더 규칙은 일반 윈도우 애플 리케이션을위한보다 다소 다릅니다. ClickOnce 콘텐츠 파일이 배포되는 데이터 폴더는 c : \ Users \ me \ Local Settings \ Apps \ 2.0 \ Data에 있습니다. 그 폴더 아래에 다소 비밀스러운 식별자가있는 두 개의 하위 폴더 수준이 있습니다.

따라서 주어진 ClickOnce 앱의 실제 데이터 폴더는 ApplicationDeployment 클래스를 사용하여 가장 잘 검색됩니다. 당신은 또한 당신이 배치 모드에서 실행하고 있는지 확인하기 위해 IsNetworkDeployed 속성을 확인해야 다음 DataDirectory를 이후

if (ApplicationDeployment.IsNetworkDeployed) 
{ 
    var dataDirectory = ApplicationDeployment.CurrentDeployment.DataDirectory; 
    ... 
} 

당신이 당신의 log4net의 구성에 해당 경로를 하드 코딩 할 수있는 방법은 없습니다 ClickOnce를 결정한다. 내 제안은 응용 프로그램 시작시 프로그래밍 방식으로 파일 경로를 수정하는 것입니다.

foreach(var appender in LogManager.GetRepository().GetAppenders()) 
{ 
    var fileAppender = appender as FileAppender; 
    if (fileAppender != null) 
    { 
     fileAppender.File = 
      fileAppender.File.Replace("${LOCALAPPDATA}", dataDirectory); 
     fileAppender.ActivateOptions(); 
    } 
} 
+1

이 문제가 해결되지 않을 경우, 반드시 구성 파일을 (예를 들어 log4net.config가)는 "데이터 파일"로 배포되지 않는 @Pakman 말한 유사 – Pakman

+1

, 당신은 확인해야 log4net.config 파일 속성의 빌드 작업은 log4net.config 파일을 배포하고 응용 프로그램에서 읽을 수 있도록 Content (None이 아님)로 설정됩니다. http://stackoverflow.com/a/16433824/602585 – deadlydog

관련 문제