2010-05-25 123 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