部署 ClickOnce 时缺少 dll
Posted
技术标签:
【中文标题】部署 ClickOnce 时缺少 dll【英文标题】:Missing dll when deploying ClickOnce 【发布时间】:2012-10-16 17:06:36 【问题描述】:当我发布 ClickOnce 应用程序时,我的一个项目中包含的其中一个引用丢失了。
如果我转到项目的属性 -> 应用程序文件,这里甚至没有列出缺少的参考。
我的 bin/Release 文件夹有一个 .exe.manifest 文件,我注意到这里也缺少它。
但是,当我构建项目时,DLL 实际上被复制到我的 bin/Release 文件夹中。
我如何确保它也部署了这个必需的依赖项?
【问题讨论】:
【参考方案1】:我终于找到了解决这个问题的方法,我希望它能解决你的问题。 就我而言,我正在编辑一个有多个项目的旧应用程序,但主项目和它的后端项目在这里是最重要的。 后端添加在主项目的 References 部分。 在后端,导入了一个第三方 dll,但是这个 dll 需要另外 2 个 dll。 所以这 3 个 dll 被添加到后端项目的 References 部分。
此时,其他 2 个 dll 之一没有显示在 ClickOnce 的“应用程序文件”部分中。 我想出了几种修复它的方法,但最优雅的一种是将这个 dll 添加到主项目的参考部分。
【讨论】:
遗憾的是,我也发现这是最简单的解决方案。这让我很困扰,因为我有越来越多的应用程序需要跟上解决方案已经知道的各种依赖关系:/ 请注意,这仅适用于 COM/.NET 程序集,不适用于普通 C DLL。【参考方案2】:如How to: Specify Which Files Are Published by ClickOnce 中所述,将引用上的 Copy Local 属性值更改为 True。
添加引用时,对程序集(.dll 文件)的引用指定如下:如果 Copy Local 为 False,则默认将其标记为先决条件程序集(Prerequisite (Auto)),该程序集之前必须存在于 GAC 中应用程序已安装。如果 Copy Local 为 True,则程序集默认标记为应用程序程序集(包括(自动)),并将在安装时复制到应用程序文件夹中。只有当其独立属性设置为 True 时,COM 引用才会出现在“应用程序文件”对话框中(作为 .ocx 文件)。默认情况下会包含在内。
【讨论】:
是的,我已经查看了属性,并且在它出现的每个项目中,该 DLL 的“复制本地”属性已经设置为 True。 您在 ClickOnce 应用程序的项目中有对它的引用吗?该引用的 Copy Local 属性是否设置为 true? 应用程序项目本身没有对其的引用。即使我使用 Copy Local 为 true 添加对它的引用,它也没有任何区别,并且应用程序文件中仍然缺少 dll,也没有部署它。 添加引用后是否重新构建,然后查看应用程序文件? 我刚刚执行了重建,但应用程序文件中仍然缺少它。【参考方案3】:我知道这是一个老问题,但对于任何有类似问题的人。我认为这是解决问题的一种更清洁的方法。 我遇到了类似的问题,我为让 ClickOnce 部署有问题的 .dll 所做的一切都失败了。 最终,我不得不手动部署。 See walk-through here. 这对我来说非常有用。但是,对于我的生活,我仍然想知道为什么不能将这个过程添加到 VS 中(我使用的是 2017 社区)。
【讨论】:
以上是关于部署 ClickOnce 时缺少 dll的主要内容,如果未能解决你的问题,请参考以下文章
ClickOnce 安装期间出现 FileNotFoundException,缺少 HKCU\Software\Classes\Software