6

我该怎么做?有什么理由我不应该吗?

我有一个 winform ClickOnce 应用程序,它的 DLL 中有大约 13mbs 不是我的,所以我不需要/无法定期更新它们。

DevExpress(3)、Microsoft ReportViewer、Microsoft SQL 复制。微软 SQL SMO。

如果没有将它们包含在我的 ClickOnce 应用程序中,我的整个程序大约只有 1.5mbs,而且我们的远程站点的 vpn 连接有限,我真的需要把它放在那里。每次我对应用程序进行小的更改时,我都无法通过我们的网络向所有用户发送 15mbs。

谢谢


更新澄清

为了澄清; 我不想使用ClickOnce 将我的 DLL 安装到 GAC。ClickOnce 是我的主要应用程序需要使用的。我想从 ClickOnce 应用程序中删除 13mbs 的 DLL,并安装它们以在所有本地系统上使用。

如果我能在没有 GAC 的情况下完成此任务,那就太好了。我只需要我的主应用程序修剪器以便更新。

4

6 回答 6

7

扩大@kanad的回应......

您的 13MB dll 只会在用户第一次安装应用程序时下载。这是 ClickOnce 的一大优势,用户只需下载已更改的文件。

然而,令人困惑的是,ClickOnce 进度对话框总是显示应用程序的整个大小,即使它可能没有下载整个应用程序。我进行了广泛的测试以确保情况确实如此,并使用带宽监视器向自己证明了这一点。

最后,如果您可以控制 Web 服务器,则可能需要考虑为 ClickOnce 应用程序启用压缩。它有助于大大减少下载大小。压缩是一种痛苦的设置,但这篇文章应该让你开始。但是,再一次,压缩大小不会反映在 ClickOnce 进度对话框中。

最好的办法就是忽略出现在 ClickOnce 进度对话框上的数字 :)

于 2009-07-09T13:59:09.810 回答
4

Clickonce 无法将文件安装到 GAC 中。您需要创建 MSI 或提升权限才能执行此操作。

通常您应该避免 GAC,除非它解决了特定问题。安装大小是否比 ClickOnce 下载更痛苦——用户使用的是 50K 调制解调器还是高速 LAN?

Chris Sells 有一篇很棒的文章,介绍了为什么应该避免 GAC,还有其他各种堆栈溢出帖子 - 请参阅此处此处此处

归根结底,您需要评估利弊并决定最佳行动方案。

于 2009-07-08T19:04:33.970 回答
4

这是我过去所做的,对我来说效果很好。我让 ClickOnce 应用程序在 GAC 中查找其中一些依赖项。事实上,它会在每次应用程序加载时进行检查。我使用一个简单的文件来查看依赖项是否在 GAC 中。如果缺少依赖项,我会显示一条消息,指出您缺少一些依赖项以及有关如何修复它的一些说明。然后我掏出并下载一个自解压 exe,它在 GAC 中安装依赖项。它有点像 Rube Goldbergen,但对我来说效果非常好。

我只会将在可预见的未来 3rd 方控制等方面保持静态的东西放在 GAC 中。

我有一个非常胖的客户端,其中包括 MS Reporting、Infragistics 和 SMO 等,我们每周部署一个左右,大约 3.5MB。我们的许多用途都非常偏远,并且使用您可以上网的数据卡。

于 2009-07-08T20:57:27.097 回答
3

尽管其他答案是正确的,但 ClickOnce 只会下载一次 DLL(如果它们没有更改)来解决您的直接问题,如果您将在 ClickOnce 进程之外将 dll 安装到 GAC 中并且不想下载这些通过 ClickOnce 的 DLL,您可以执行以下操作。

通过在 ClickOnce->Application Files 设置中将它们设置为先决条件,从 ClickOnce 下载中排除这些 DLL 。

执行此操作时,ClickOnce 运行时将在下载前检查 GAC 并确保这些 DLL 存在。

于 2009-07-09T14:10:06.863 回答
2

你怎么知道它是否每次下载完整的 15 MB。clickonce 对话框总是这样说,但它实际上并没有下载所有文件,只有那些哈希在清单中发生变化的文件。鉴于有办法从具有不同 URL 的 CD 部署以进行更新检查。通过这种方式,您可以首次从 CD 安装,然后应用程序只能从您发布的站点更新自身。

于 2009-07-08T21:38:56.967 回答
2

根据谷歌没有也没有。

您将不得不研究替代安装工具,例如创建 MSI 安装程序。这听起来很奇怪,但我解决安装大小的第一个想法是拥有两个安装程序。一个将依赖项安装到 GAC 中,用户只需运行一次,另一个安装程序(我猜可能使用 ClickOnce)安装实际应用程序。使用此方法,理论上您可以依赖较小的 ClickOnce 部署来进行所有未来的应用程序更新。

于 2009-07-08T19:10:46.080 回答