2010-05-25 2 views
0

빌드 빌드 이벤트를 사용하여 제작 빌드를 별도의 폴더에 복사하고 app.config 파일을 프로덕션 app.config로 대체합니다. 그러나 Clickonce는 bin \ Release 폴더에있는 파일을 읽습니다.Clickonce 소스 폴더 변경

포스트 빌드 이벤트에서 맞춤 빌드 위치의 모든 파일을 bin\Release 폴더로 복사하려고 시도했지만 app.config가 계속 재정의됩니다 (clickonce가 bin \ Release로 프로젝트를 다시 빌드 한 것 같습니다).

Google 맞춤 폴더에서 읽도록 Clickonce에 알릴 수 있습니까? 또는 이것이 올바른 방법이 아니라면 어떻게 이런 상황을 처리 할 수 ​​있습니까?

편집 : 추가 정보를 원하시면

빌드 후 이벤트 스크립트를


del /s /q /f "$(SolutionDir)Build\Client" 
rmdir /s /q "$(SolutionDir)Build\Client" 

if $(ConfigurationName) == Debug goto :debug 
if $(ConfigurationName) == Release goto :release 

:release 

xcopy "$(TargetDir)*.dll" "$(SolutionDir)Build\Client\Prod\" /Y /I /R 
xcopy "$(TargetDir)*MyApp.UI.Win.exe" "$(SolutionDir)Build\Client\Prod\" /Y /I /R 
copy "$(TargetDir)Configs\App.Production.config" "$(SolutionDir)Build\Client\Prod\$(TargetFileName).config" /Y 

REM for clickonce 
copy "$(TargetDir)Configs\App.Production.config" "$(TargetDir)$(TargetFileName).config" /Y 
copy "$(TargetDir)Configs\App.Production.config" "$(TargetDir)PostBuildEventWasHere.config" /Y 
del /s /q /f "$(TargetDir)\*.pdb" 

goto :exit 

:debug 

xcopy "$(TargetDir)*.dll" "$(SolutionDir)Build\Client\Dev\" /Y /I /R 
xcopy "$(TargetDir)*MyApp.UI.Win.exe" "$(SolutionDir)Build\Client\Dev\" /Y /I /R 
copy "$(TargetDir)Configs\App.Development.config" "$(SolutionDir)Build\Client\Dev\$(TargetFileName).config" /Y 

goto :exit 

:exit 

그리고 내 출력 게시 :


------ Build started: Project: MyApp.UI.Win, Configuration: Release Any CPU ------ 
(...builds all projects) 
Compile complete -- 0 errors, 4 warnings 
(...echoing the build event script here, and successful copy/delete messages) 
Building MyApp.UI.Win... 
(It must be rebuilding here!) 
------ Publish started: Project: MyApp.UI.Win, Configuration: Release Any CPU ------ 
Connecting to '\\MyPublishLocation'... 
Publishing files... 
Publish success. 
\\MyPublishLocation\publish.htm 
========== Build: 8 succeeded or up-to-date, 0 failed, 0 skipped ========== 
========== Publish: 1 succeeded, 0 failed, 0 skipped ========== 

답변

1

우리가 가진 C를 ase 우리가 디버그 대 릴리스 구성을위한 dll 중 하나에 대해 다른 라이센스를 보유한 곳. 우리는 두 라이센스를 프로젝트에 추가하고 올바른 라이센스를 출력에 포스트 빌드 명령을 넣어 출력을 처리했습니다. 이로 인해 ClickOnce 배포본에 있던 파일 만 가져 왔습니다. app.config 파일을 사용하여이 작업을 시도해 볼 수 있습니다. 여기에 우리가 해냈어 방법은 다음과 같습니다 (이 빌드 후 사본으로 대체 될 것 때문에)

  1. 는 하나 중요하지 않습니다, 당신의 프로젝트에의 app.config 파일 중 하나를 추가합니다. 이렇게하면 응용 프로그램 파일에 나타나고 배포됩니다.

  2. 사용하려는 각 구성에 대한 폴더를 추가하십시오. 우리는 이러한 폴더를 license_debug 및 license_release라고했습니다. 라이센스를 각각의 폴더에 저장합니다. 두 개의 폴더를 모두 배포하여 파일이 사후 빌드 명령을 처리 할 수 ​​있도록했습니다.

  3. 기본적으로 폴더의 파일을 최상위 디렉토리에 복사하는 빌드 후 명령을 추가하십시오. 따라서 디버그 빌드를 수행하면 디버그 라이센스가 복사됩니다. 릴리스 빌드를 수행하면 릴리스 라이센스가 복사됩니다.

    모르겠어요

    COPY/Y "$ (TARGETDIR) 라이센스 _ $ (ConfigurationName) *. *" "$ (TARGETDIR)"

는 여기에 우리의 빌드 후 명령입니다 이것이 app.config 파일과 함께 작동한다면, 왜 그렇게되지는 않을지 모르겠다.

+0

자세한 답변 해 주셔서 감사합니다. 우리는 프로젝트에 app.config 파일을 추가하고 "Configs"폴더에 3 개의 다른 설정 파일을 가지고 있습니다. 빌드 후 이벤트 (릴리스 모드)에서는이 폴더의 프로덕션 app.config 파일이 설명 된대로 맨 위 폴더에 복사됩니다. 그러나 프로젝트를 마우스 오른쪽 단추로 클릭하고 게시하면 프로덕션 app.config가 최상위 폴더의 app.config로 대체됩니다. 내 post-build 이벤트가 실행 된 후 clickonce가 추가 빌드를 수행하기 때문에 이것이라고 생각합니다. Post-Build 이벤트에서 삭제하더라도 Pdb 파일은 여전히 ​​존재합니다. – henginy

+0

참고 : 게시하지 않고 프로젝트를 빌드하면 모든 것이 정상입니다. app.config가 올바르게 프로덕션 app.config로 대체됩니다. 게시 후에는 재정의됩니다. – henginy

+0

이것은 이상한 일이며, ClickOnce 팀에 문의하십시오. 내 경험에 비추어 볼 때 빌드를 작성한 다음 전개를 작성합니다. 우리에게는 괜찮 았지만 app.config 파일과 다를 수 있습니다. – RobinDotNet