【问题标题】:Getting System.DllNotFoundException when deploying to production machine部署到生产机器时获取 System.DllNotFoundException
【发布时间】:2011-07-22 11:33:22
【问题描述】:

我正在部署一个 WPF ClickOnce 应用程序,该应用程序使用 VC++ 编写的第 3 方 dll 和第 3 方 C# dll 来访问此 C++ 库。我对这些组件中的每一个都有 Visual Studio 解决方案,并且我已经使用 Release/x86 配置构建了它们。

我的应用程序也设置为发布,但是,当我将应用程序部署到机器(没有 Visual Studio)时,我得到 System.DllNotFoundException,它说它找不到 c# dll。我检查了部署机器的“应用程序文件”目录中是否存在所有必需的文件。

感谢您的帮助。

【问题讨论】:

  • 它们不应该在部署机器上的可执行文件目录中吗?确保它们被标记为“包含”而不是“数据文件”。
  • 是的,c++ .dll 和 c# .dll 都与可执行文件在同一个文件夹中,并且都标记为 Include/Required
  • 我还应该补充一点,我在 VS 2010 中构建了第 3 方组件,而我的应用程序是 VS2008。我不确定这是否会有所不同。
  • 您无法使用 ClickOnce 部署 C++ 运行时 DLL。我猜这必须是一个“先决条件”。

标签: c# wpf clickonce


【解决方案1】:

在我过去遇到的类似情况中,我几乎总是忘记包含 Microsoft Visual C++ CRT DLL。

它们包含在您的 Visual Studio 安装中,类似于

c:/program files (x86)/microsoft visual studio .net 10/vc/redist/...

通常,我只是将 DLL(以及清单文件,如果您低于 VS 10.0)复制到存储我的可执行文件的文件夹中。

由于我使用“普通”安装程序,我不确定这是否也适用于 ClickOnce。

【讨论】:

  • 感谢 Uwe 的建议。我将 CRT .dll 移动到与可执行文件相同的文件夹中,但仍然出现相同的错误。
  • Uwe...我能够通过将 VS 2010 C++ redist(我发现它是第 3 方 dll 的依赖项)安装到问题机器来解决问题。你是说我可以通过简单地将 2 个 CRT dll 添加到可执行文件的文件夹中来绕过安装 redist?
  • @Jon E - CRT 只是组件之一。其他可能包括 ATL 和 MFC 库。对我来说,只需将 DLL 复制到可执行文件的文件夹就足够了,我不需要任何 redist 设置。
  • 如果您混合使用 VS2010 和 VS2008,可能需要为 V9 和 V10 部署 C++ 库。另外请注意 C++ 库的 DEBUG 和 RELEASE 版本以及处理器类型(x86 或 x64)。这两个条件都必须与您的 DLL 匹配。
  • 感谢 Uwe:我能够通过使用 Visual Studio 2008 编译第 3 方 c++ dll 来解决 redist 问题,这消除了对 VS2010 c++ redist 的依赖。它现在依赖于 vc++ 9 库。我在部署到客户端计算机时还没有遇到任何问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 2016-03-10
  • 2018-06-21
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多