更改Clickonce源文件夹

时间:2010-05-25 15:57:57

标签: build clickonce

我们使用生成后事件将生产版本复制到单独的文件夹中,并将app.config文件替换为我们的生产app.config。但是,Clickonce会读取bin \ Release文件夹中的文件。

我还尝试在构建后事件中将所有文件从我们的自定义构建位置复制到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 ==========

2 个答案:

答案 0 :(得分:1)

我们遇到过一个案例,我们的dll用于调试与发布配置有不同的许可证。我们通过将两个许可证添加到项目中,并使用构建后命令将正确的许可证复制到输出来处理它。这导致我们的ClickOnce部署只是获取那里的文件。您可以使用app.config文件尝试此操作,看看它是否有效。这是我们如何做到的:

  1. 将一个app.config文件添加到您的项目中,无论哪一个(因为它将被构建后的副本替换)。这可确保它显示在应用程序文件中并进行部署。

  2. 为要使用的每个配置添加一个文件夹。对我们来说,我们称这些文件夹为license_debug和license_release。我们将许可证放在各自的文件夹中。我们最终部署了两个文件夹,因此文件将用于构建后命令。

  3. 添加一个post-build命令,该命令基本上将文件从文件夹复制到顶层目录中。因此,如果我们进行了调试构建,它将复制调试许可证。如果我们进行了发布版本,它将复制发布许可证。

  4. 这是我们的构建后命令:

    COPY / Y“$(TargetDir)许可证_ $(ConfigurationName)*。*”“$(TargetDir)”

    我不知道这是否适用于app.config文件,但我不知道为什么不会。

答案 1 :(得分:0)

我使用MSBuild和mage解决了这个问题,使用下面的示例。我不想使用MSBuild,但我找不到任何其他方式。

http://blog.gatosoft.com/PermaLink,guid,d0a0dd1e-c9ac-4fa9-a408-615454d49702.aspx