如何将视觉C++重新分发包含在应用程序中

How to include Visual C++ Redistribution with application

本文关键字:包含 应用程序 视觉 C++      更新时间:2023-10-16

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

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

可在此处找到所需文件的列表:

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

它特别指出 CefSharp 版本 43.0.0 及更低版本需要 VC++ 版本 2012。因此,我下载了vcredist_x86.exe(2012版) 我在 Microsoft SDK 文件夹中创建了一个包.xml和产品.xml引导程序文件。我将这些作为先决条件包含在Visual Studio 2010的"发布"屏幕中。

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

我不知道该怎么做,以便让浏览器在我的开发环境之外工作,即最终用户成功使用。 我已经遵循了我在网上找到的所有步骤,无论是在Stackoverflow还是Github for CefSharp上。还需要什么才能使其正常工作?

请帮忙!

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

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

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

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