【问题标题】:C++/C# ReferenceC++/C# 参考
【发布时间】:2014-06-20 14:32:29
【问题描述】:

我已经使用 VS2013 创建了一个 C# winforms 应用程序,其中包括我也有代码的 C++ DLL。 这个应用程序在我的 win7 64 位机器上运行良好。 当我在同事的机器上运行它进行部署测试(相同的硬件,相同的操作系统,没有 VS2013)时,应用程序崩溃并说找不到 C++ DLL 或其依赖项之一。

当我在我的机器上运行dependency walker 时,它列出了与此线程中相同的缺失DLL: Win 7, 64 bit, dll problems

所以我按照那里提到的解决方案安装了 C++ Redistable Packages 2005、2008、2010、2012 和 2013,但没有成功。

所有项目都以 .NET 4.0 (x86) 为目标。 C++ 项目有很多外部引用,但仅限于 .NET DLL 和 C++ 头文件,后者大部分来自 c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include 我不需要部署头文件,是吗?

有人知道如何进行吗?

【问题讨论】:

  • C++ DLL 是发布还是调试版本?
  • 调试版本,也是 C# exe
  • 这可能是问题所在。当您下载 VC++ Redist 包时,它们可能不包含与您的 C++ DLLS 链接的调试版本。尝试使用 C++ DLL 的发布版本,看看是否可行,然后您就会知道这是问题所在。
  • 另一种避免 DLL HELL 的方法是静态链接 stackoverflow.com/questions/2035287/…,其中列出了问题,但没有 DLL HELL。
  • 您可以使用来自 (ilspy.net) 的 ilspy 来查看加载程序集/dll 的问题。

标签: c# c++ dll


【解决方案1】:

这可能是因为您的 C++ DLL 是调试版本,并且与构建它们的 VS 版本所使用的 VC++ 运行时库的调试版本动态链接。您可以构建 C++ DLL 的发布版本并使用它们,在这种情况下,安装的 VC++ 可再发行包应该提供正确的运行时库,或者您可以获得所需 VC++ 运行时库的调试版本并确保它们存在于目标机器。

如果您必须使用 C++ DLL 的调试版本,那么 Microsoft 会提供一些关于如何设置您的测试机 here 的说明。

【讨论】:

  • 感谢您的建议,听起来很不错。由于我的日程安排,我无法在下周四之前测试它,但我肯定会在这里发布结果。
  • 在为“Release”构建 DLL 之后,一切正常。我不知道配置的差异。
猜你喜欢
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多