如何在应用程序中包含 Visual C++ 再分发

Posted

技术标签:

【中文标题】如何在应用程序中包含 Visual C++ 再分发【英文标题】:How to include Visual C++ Redistribution with application 【发布时间】:2018-03-07 01:04:59 【问题描述】:

我在 Visual Studio 2010 中编写了一个大型 C# 4.0 应用程序。前段时间我添加了 CEF 框架(版本 43.0.0.0),以便在我的 WinForms 应用程序中使用 Web 浏览器。

如果我从 Visual Studio 运行我的应用程序,浏览器会正常运行。但是,在使用 ClickOnce 部署我的应用程序时,它引发了以下错误:“无法加载文件或程序集 'CefSharp.Core.dll' 或其依赖项之一。找不到指定的模块。”尽管所有 CEF 文件都存在于 bin\Debug 文件夹中。事实上,我在 GitHub 上找到了一个页面,列出了需要哪些文件,并仔细检查确认所有文件都存在于可执行文件夹中。

A list of required files can be found here:

上述文章中提出的要点之一是,Visual C++ Redist 文件是必需的,并在问题 6 中提出。如何在目标应用程序中包含 Visual Studio C++ 2012/2013 可再发行组件?

特别说明CefSharp 43.0.0及以下版本需要VC++ 2012版本,所以我下载了vcredist_x86.exe(2012版本) 我在 Microsoft SDKs 文件夹中创建了 package.xml 和 product.xml 引导程序文件。我将这些作为先决条件包含在 Visual Studio 2010 的发布屏幕中。

但是,在 ClickOnce 部署并尝试启动 CEF Web 浏览器时,它会立即引发异常“无法加载文件或程序集 'CefSharp.Core.dll' 或其依赖项之一。指定的模块无法找到了。”

我不知道该怎么做才能让浏览器在我的开发环境之外工作,即让最终用户成功使用。 我已经按照我在网上找到的所有步骤,包括 *** 和 Github for CefSharp。还需要什么才能使其正常工作?

请帮忙!

【问题讨论】:

首先,您需要通过手动部署验证应用程序在所有假定正确文件存在的情况下运行。然后,您需要具体验证使用 ClickOnce 部署时哪些文件不存在。 查看答案:***.com/q/14497382/126995 你好,马克。我不清楚您所说的“手动部署”是什么意思。我需要完全信任的 ClickOnce 部署。 GitHub 参考上的常见问题解答:“对于 ClickOnce,请参阅 #1314 了解其他用户提出的一些指示和解决方案。”他们声明需要包含一些非托管 dll,但我看不到 #1314 概述了哪些步骤。 github.com/cefsharp/CefSharp/wiki/… 马克,您知道是否需要将 CEF“packages”目录中的文件复制到 bin\Debug 文件夹,或者 Microsoft 在部署过程中是否以某种方式复制? 我将关闭这篇关于 SO 的帖子,因为我将把这个问题直接发布到 GitHub 论坛的 CefSharp 部分,因为向 CEF 社区询问这个问题似乎更相关,通过那些积极支持浏览器的人。谢谢 【参考方案1】:

我添加此附录以防任何使用 CefSharp 的人遇到相同的问题,即“无法加载文件或程序集 'CefSharp.Core.dll' 或其依赖项之一。找不到指定的模块."。原来是 ClickOnce 问题。 ClickOnce 包含所有“托管”资源,但不包含非托管资源,即 cef.pak、cef_100_percent.pak、d3dcompiler、libcef.dll、icudtl.dat 等。

如果我右键单击引用并尝试浏览到这些资源以添加它们,Visual Studio 会抱怨它们是非托管的并且不允许添加它们。

在使用 Microsoft ClickOnce 和部署论坛后,建议我右键单击项目,添加 > 现有项并添加它们。然后将他们的构建操作设置为“内容”并将复制到输出目录设置为“始终复制”。

这允许资源显示在“发布”选项卡上的“应用程序文件...”中。在另一个 ClickOnce 部署之后,成功启动了 Web 浏览器。不再抱怨丢失文件。

【讨论】:

以上是关于如何在应用程序中包含 Visual C++ 再分发的主要内容,如果未能解决你的问题,请参考以下文章

在 Microsoft Visual Studio 2015 的 C++ 项目中包含 Armadillo C++ 库

在 Visual C++ DLL 中包含 MFC 资源(CDialog-Form)

如何在 Visual Studio、C# 项目的部署中包含文件和文件夹?

如何在 Visual Studio 中制作可分发的 C++ 程序

Qt:如何告诉 Qmake 在 Visual Studio 项目中包含 ws2_32

如何在我的项目分发中包含包子文件夹?