我有一个开发app.config和一个部署app.config。我需要clickonce在部署时更改它。这是否可以自动完成?
答案 0 :(得分:3)
如果您不想重新构建应用程序,可以尝试这种直接适用于已部署文件的方法。
作为我们测试工作流程的一部分,我们经常设置同一应用程序的多个部署,只有.config
文件中的差异。每次我们想要使用不同的配置文件添加新部署时,我们实际上不希望重新发布。由于ClickOnce要求对所有内容进行签名和散列,因此无法仅更改myapp.exe.config.deploy
文件内容并期望一切正常。因此,您可以做的是在进行更改后使用mage.exe
更新您的清单。
如上所述here,你基本上需要做的是:
首先,转到部署目录中的“Application Files \ MyApp_1_2_3_4 \”目录
您必须将所有文件从something.extension.deploy
重命名为something.extension
然后运行:
mage -Update "Application Files\MyApp_1_2_3_4\myapp.exe.manifest"
mage -Sign "Application Files\MyApp_1_2_3_4\myapp.exe.manifest" -CertHash my_ceritficate_thumbnail
然后将文件重命名为原始名称(添加.deploy
扩展名)
最后,运行:
mage -Update MyApp.xbap -appmanifest "Application Files\MyApp_1_2_3_4\myapp.exe.manifest"
mage -Sign MyApp.xbap -CertHash my_certificate_thumbnail
或者,为避免重命名文件,您可以告诉Visual Studio在发布时不要添加.deploy
扩展名(转到Visual Studio项目中的发布...选项),下次发布时,文件不会获得该扩展名。我唯一猜测的危险就是在某些用户尝试下载.exe
或.dll
文件时遇到防火墙问题。
答案 1 :(得分:2)
我认为这是一种更好的方法:
答案 2 :(得分:1)
一种简单的方法是在预构建脚本中复制app.config文件,您可以在应用程序的属性页构建事件中定义。
您可以这样做:
1)创建一个仅用于部署到生产的解决方案配置,并在脚本中打开它,例如
if ($(ConfigurationName)) == (PublishConfig) call ReplaceAppConfig.cmd
或者,如果您只在特定计算机上构建发布配置:
2)始终在预构建事件中运行脚本:
call CheckAndReplaceAppConfig.cmd
在这种情况下,和CheckAndReplaceAppConfig.cmd将具有:
IF (%MACHINENAME%)==(PUBLISH_SERVER) ReplaceAppConfig.cmd
答案 3 :(得分:0)
如果您使用的是VS工具,那么配置文件都是部署签名部分的一部分。因此,最好的方法是使用 build 工具 - 即使用dev / live / etc配置文件构建不同的版本。
使用3.5SP1,你可以opt out of the signing;我不知道你是否可以通过IDE做到这一点 - 如果你手动(通过法师)你可以做到这一点,但这还有很多工作......