使用ClickOnce部署基于MEF的应用程序

6
我有一个应用程序,它是一堆MEF部分的外壳。虽然用户可以在其文件系统中的某些特殊位置添加新的MEF部分,但应用程序本身需要独立部署约5或6个这些库才能正常工作。我想使用ClickOnce来进行部署,那么最好的方法是什么呢?
我能想到的最简单的方法就是在IDE中引用DLL并将其标记为内容。然后它们会被部署。但这意味着硬编码文件路径(debug / release等)。因此,似乎应该有更好的方法。
第二种方法是将MEF DLL的刚构建版本复制到一个公共目录中,并始终以项目引用它们并将其标记为“内容”。
我看到另一个问题中提到了创建可分发文件的参考资料(Deploying MEF parts)。那里的最终解决方案看起来很像将所有内容复制到一个目录中,然后在客户端上解压缩 - 这基本上就是我的上面想法中显式引用“内容”所做的事情(我想)。
还有其他选项吗?非常感谢!

3
目前我在我的应用程序中创建了一些文件夹,然后添加了链接到需要部署的dll和其他文件。我将它们都标记为“内容”。然后我编辑了解决方案文件,并将路径中的“Debug”替换为$(Configuration),这样在部署时就会选择正确版本的文件。目前看来这种方法似乎可行,但感觉不是很优美。 - Gordon
1个回答

1
我有一个应用程序,可以访问各种第三方库。最初,当我通过ClickOnce发布我的应用程序时,它的大小约为22Mb,由于这是初始版本,因此在用户使用了几个月后,我不得不发布相当多的更新。

对于那些当时拥有较慢数据连接的用户来说,这是太多的数据了。我必须找到更好的解决方案。

最终,我创建了一个名为My ClickOnce Application - Prerequisites的虚拟工程。从该项目中,我添加了所有需要的第三方依赖项,并添加了一个MSI安装程序,将库安装在Windows GAC中。构建MSI安装程序后,我创建了引导程序,并将其添加到Visual Studio for ClickOnce中。

从我的ClickOnce应用程序项目中,我只需在Visual Studio中选择我的新先决条件,并在VS中的Application Files对话框中将每个相关的dll设置为“先决条件”即可。

我认为这种设置可能适合您。有关此类型设置的更多详细信息,请查看下面列出的链接。这种方法唯一的主要缺点是,如果您需要更新第三方库,则需要分发先决条件的更新版本。这很可能意味着您需要卸载并重新安装ClickOnce应用程序,因为库文件被安装为先决条件。

进一步阅读


非常好,如果我理解得正确的话。在我的情况下,没有一个小的库是第三方的--只有我的自己的小库。但是没错,我想click-once从来没有被设计用来进行如此大的安装。 - Gordon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接