可以将 ClickOnce 配置为删除旧的已发布目录吗?

Posted

技术标签:

【中文标题】可以将 ClickOnce 配置为删除旧的已发布目录吗?【英文标题】:Can ClickOnce be configured to delete off old published directories? 【发布时间】:2010-09-30 20:58:36 【问题描述】:

能否将 ClickOnce 配置为删除旧的已发布目录?

或者

是否有人编写了一些代码来删除这些发布目录(可能保留最后 10 个)?

目前,每次 ClickOnce 发布完成时,都会在 IIS 服务器上创建一个新目录。这个 NEW 目录包含下载的整个应用程序的副本。旧目录似乎不再使用,只是占用了大量空间。

这是正在创建的目录名称的示例。如您所见,名称中使用了应用程序版本号。 EduBenesysNET_1_0_1_0 EduBenesysNET_1_0_1_1 …. EduBenesysNET_1_0_1_192 EduBenesysNET_1_0_1_193

我们有 194 个(基于零的)构建,每个目录都保留在那里。一个构建的大小约为 50mb,您可以看到将旧目录保留在那里将开始占用磁盘空间。

我们的应用程序的工作方式是您始终必须下载最新版本。您没有跳过下载的选项,所以我希望删除旧目录不成问题。

【问题讨论】:

【参考方案1】:

好问题 (+1) - 人们会认为这应该以某种方式成为可能......

仔细观察会发现,观察到的发布行为实际上并不是 ClickOnce 技术的一个特性,而是 Visual Studio Publish Wizard 的一个特性——例如参见 @987654322 中的 ClickOnce 发布文件夹结构部分 @:

如果您使用 Mage 或自定义工具手动生成或更新 ClickOnce 应用程序发布,您将不受此文件夹和文件结构的限制。对于任何特定的 ClickOnce 发布,依赖链包括以下内容:[...] [强调我的]

Walkthrough: Manually Deploying a ClickOnce Application 得出相同的结论,即 VS 使用的文件夹结构只是一种(合理的)约定/方法。

不幸的是,VS 发布向导似乎并没有提供删除旧版本的功能,至少它在某处既不可见也不记录在案。但是,鉴于生成的文件夹结构只是构建过程的一个工件,您不妨添加一个自定义构建步骤来做到这一点 - 弄清楚细节(即访问 VS 自动化属性以派生最后发布的版本等)是虽然超出了您的问题范围;)

关于你的子问题:

我希望删除旧目录不成问题。

绝对不是问题,它只取决于您最终要保留多少个用于回滚操作,请参见例如Can I delete previous old versions from Publishing Location created by ClickOnce?

【讨论】:

我确实添加了第二个问题,询问是否有人编写代码来删除已发布的目录。好主意欧宝,把它变成一个单独的问题。然后我将链接回这个问题。【参考方案2】:

简短的回答是,这不是 Visual Studio 或 ClickOnce 部署中内置的东西,您必须找到另一种方法来执行此操作,可能是通过您在服务器上运行的脚本。

如果您根据需要推送更新,则可以删除除当前版本之外的所有版本。如果您不这样做,则需要保留两个版本,以防用户恢复一个版本。

【讨论】:

以上是关于可以将 ClickOnce 配置为删除旧的已发布目录吗?的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot多环境配置,旧的已过时,新的有人还不知道

ClickOnce 完成卸载

Xcode 指示 C++ 不存在的已删除变量的未声明标识符错误

删除旧的 SSH 会话配置(用于远程调试)

MSIX 添加类似于 ClickOnce 的先决条件

ruby 生成随机文件名并保存旧的已保存文件名(CarrierWave FTP)