我该怎么做?有什么理由我不该做?
我有一个winform clickonce应用程序,有大约13mbs的dlls不是我的,所以我将没有必要/能力更新他们在任何定期间隔。
微软SQL数据库管理系统,微软SQL数据库管理系统,微软SQL数据库管理系统,微软SQL数据库管理系统,微软SQL数据库管理系统,微软SQL数据库管理系统,微软SQL数据库管理系统。
如果没有他们被包括在我的ClickOnce应用程序我的整个程序来在约1.5mbs和我们的远程网站有有限的VPN连接,我真的需要得到它在那里.我不能通过我们的网络发送15mbs到所有用户每次我做了一个小的应用程序更改.
谢谢
更新以澄清
用于澄清;我不想使用ClickOnce将我的DLL安装到GAC。ClickOnce是我的主应用程序需要使用的DLL。我想从ClickOnce应用程序中删除这13mbs的DLL,并将它们安装到所有本地系统上以供使用。
如果我能完成这一点与出gac,太棒了。我只需要我的主要应用程序trimer所以更新。
6条答案
按热度按时间ilmyapht1#
@kanad回应的详细内容...
用户只有在第一次安装应用程序时才能下载13 MB的dll文件,这是ClickOnce的一大优势,用户只需下载更改过的文件。
然而,令人困惑的是,ClickOnce进度对话框 * 总是 * 显示您的应用程序的 * 整个大小 *,即使它可能没有下载整个应用程序。我做了大量的测试,以确保这是事实,并证明了自己使用带宽监视器。
最后,如果您可以控制Web服务器,您可能需要考虑为ClickOnce应用程序启用压缩。这有助于显著减少下载大小。压缩设置起来有点麻烦,但是this article应该可以让您开始使用。但是,再次强调,压缩大小不会反映在ClickOnce进度对话框中。
最好的办法是忽略ClickOnce进度对话框上显示的数字:)
pn9klfpd2#
Clickonce无法将文件安装到GAC中。您需要创建MSI或提升权限才能执行此操作。
一般来说,除非GAC能解决特定的问题,否则您应该避免使用GAC。安装大小是否比ClickOnce下载更麻烦-用户使用的是50 K调制解调器,还是高速LAN?
Chris Sells有一篇很棒的文章,介绍了为什么应该避免使用GAC,还有其他各种堆栈溢出帖子-请参阅here、here和here。
在一天结束的时候,你需要评估利弊,并决定什么是最好的行动方针。
8i9zcol23#
这是我过去所做的,并且效果很好。我让ClickOnce应用程序在GAC中查找这些依赖项中的一些。事实上,它在每次加载应用程序时都会进行检查。我使用一个简单的文件exists来查看依赖项是否在GAC中。如果依赖项丢失,我会显示一条消息,说明您丢失了一些依赖项,并提供一些如何修复它的说明。然后我用shell下载了一个自解压的exe文件,它在GAC中安装了依赖项。这有点像Rube Goldbergen,但对我来说它运行得非常好。
我只会在GAC中放置在可预见的未来保持静态的内容,如第三方控制等。
我有一个相当胖的客户端,包括MS报告,Infragistics和SMO等,我们每周部署一个,大约是3.5MB。我们的许多用途是非常远程的,使用数据卡访问互联网。
ljo96ir54#
虽然其他答案都是正确的,因为ClickOnce只会下载DLL一次(如果它们没有更改)以解决您的直接问题,但如果您要在ClickOnce进程之外将DLL安装到GAC中,并且根本不想通过ClickOnce下载这些DLL,则可以执行以下操作。
通过在ClickOnce-〉Application Files设置中将这些DLL设置为prequisite,从ClickOnce下载中排除这些DLL。
执行此操作时,ClickOnce运行时将在下载之前检查GAC,并确保这些DLL存在。
fd3cxomn5#
根据谷歌no和no here too.
您必须寻找其他安装程序工具,例如创建MSI安装程序。这听起来很奇怪,但我解决安装大小问题的第一个想法是使用两个安装程序。一个安装程序将依赖项安装到GAC中,用户只需运行一次,另一个安装程序(我猜可以使用ClickOnce)来安装实际的应用程序。使用这种方法,理论上可以依赖较小的ClickOnce部署来进行所有未来的应用程序更新。
nkoocmlb6#
你怎么知道它每次下载的是不是15 MB呢?clickonce对话框总是这么说,但它实际上并没有下载所有的文件,只是下载了那些散列在清单中有变化的文件。如果有一种方法可以从CD部署,并使用不同的URL进行更新检查。这样你就可以第一次从CD安装,从那时起,应用程序只能从你发布的网站更新自己。