代码之家  ›  专栏  ›  技术社区  ›  henginy

更改ClickOnce源文件夹

  •  0
  • henginy  · 技术社区  · 14 年前

    我们使用后期生成事件将生产构建复制到单独的文件夹中,并替换 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 回复  |  直到 14 年前
        1
  •  1
  •   Sampson    14 年前

    我们有一个案例,我们有一个DLL的不同许可证,用于调试和发布配置。我们通过将两个许可证添加到项目中,并放入一个后期生成命令来将正确的许可证复制到输出中来处理它。这导致了我们的ClickOnce部署只获取了存在的文件。你可以用app.config文件来尝试一下,看看它是否有效。我们是这样做的:

    1. 将app.config文件中的一个添加到您的项目中,这与哪一个文件无关(因为它将被生成后的副本替换)。这样可以确保它出现在应用程序文件中并得到部署。

    2. 为要使用的每个配置添加一个文件夹。对于我们来说,我们称这些文件夹为许可证调试和许可证发布。我们将许可证放在它们各自的文件夹中。我们最终部署了这两个文件夹,这样文件就可以用于后期生成命令了。

    3. 添加一个基本上将文件从文件夹复制到顶部目录的后期生成命令。因此,如果我们进行了调试构建,它将复制调试许可证。如果我们做了一个发布构建,它将复制发布许可证。

    以下是我们的后期生成命令:

    copy/y“$(targetdir)许可证”(configurationname)*.*”“$(targetdir)”

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

        2
  •  0
  •   henginy    14 年前

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

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