1

我有一个 WPF 应用程序,它实际上使用 Web 服务器来下载应用程序并在客户端上执行它......我还为该应用程序创建了一个暂存环境,当我在添加新功能/错误时立即发布固定的。

自从 app.config 被散列以来,我还没有找到一种从登台升级到生产的合理方法......所以我无法更改我的观点(数据库/服务)编辑它......

我的实际方法是发布以进行分期,将发布版本增加 1 并发布以进行生产……但这非常令人沮丧……因为我必须做两次工作……有什么建议吗?

谢谢

4

1 回答 1

1

我们的团队一年前遇到了同样的情况。我们已经按照以下步骤解决了这种情况:

  • 确定最新的 ClickOnce 应用程序版本;
  • 删除 *.deploy 扩展;
  • 进行必要的 *.config 文件更改;
  • 使用“Mage.exe”和您的证书更新清单文件 (*.manifest)(另见:MSDN);
  • 再次使用“Mage.exe”更新应用程序版本目录和根目录中的部署清单 (*.application);
  • 添加回 *.deploy 扩展。

这是一个调用 Mage 的简短代码示例,虽然实际上并不复杂。

// Compose the arguments to start the Mage tool.
string arguments = string.Format(
@"-update ""{0}"" -appmanifest ""{1}"" -certfile ""{2}""",
deploymentManifestFile.FullName,
applicationManifestFile.FullName,
_certificateFile);

// Add password to the list of arguments if necessary.
arguments += !string.IsNullOrEmpty(_certificateFilePassword) ? string.Format(" -pwd {0}", _certificateFilePassword) : null;

// Start the Mage process and wait it out.
ProcessStartInfo startInfo = new ProcessStartInfo(_mageToolPath, arguments);
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
Process mageProcess = Process.Start(startInfo);
mageProcess.WaitForExit();

// Show all output of the Mage tool to the current console.
string output = mageProcess.StandardOutput.ReadToEnd();

// Determine the update of the manifest was a success.
bool isSuccesfullyConfigured = output.ToLower().Contains("successfully signed");
于 2013-11-05T07:32:40.370 回答