2010-05-25 118 views
0

我們使用後期生成事件將我們的生產版本複製到單獨的文件夾中,並用我們的生產app.config替換app.config文件。但是Clickonce讀取bin \ Release文件夾中的文件。更改Clickonce源文件夾

我也嘗試從生成後事件中將我們的自定義構建位置中的所有文件複製到bin\Release文件夾,但app.config仍然被覆蓋(我猜clickonce將項目重新構建到bin \ Release中)。

是否可以告訴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其中我們有一個用於調試和發佈配置的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覆蓋。我猜這是因爲clickonce在我的post-build事件執行後做了一個額外的構建。 Pdb文件仍然存在,儘管我在生成後事件中刪除它們。 – henginy 2010-05-26 07:31:35

+0

注意:當我在沒有發佈的情況下構建項目時,一切正常。 app.config正確地被我的產品app.config取代。發佈之後,它被覆蓋。 – henginy 2010-05-26 07:37:29

+0

這很奇怪,我會詢問ClickOnce團隊。根據我的經驗,它構建並創建部署。對我們來說,這工作得很好,但對於app.config文件也許是不同的。 – RobinDotNet 2010-05-26 08:37:07