C#中无法加载C DLL

4
我有一个简单的C DLL(不是COM)。我还有一个运行它(dllimport)的C# 2.0应用程序。该DLL放置在应用程序的exe中。我知道该DLL没问题,也知道调用它的应用程序可以成功读取它,但当我将它们移动到另一台计算机上时,它会显示无法加载该DLL。
错误信息为:“无法加载dll名称.dll。此应用程序无法启动,因为应用程序配置不正确。”
我使用Visual Studio 2005创建了该DLL。目标计算机是一个并排的计算机。当我拿了包含CRT的并排文件夹时,它没有运行起来。谢谢。

1
你是否收到了错误信息或异常提示?它具体说了什么? - mdm
无法加载 dll name.dll。该应用程序无法启动,因为应用程序配置不正确。 - Boris Raznikov
你应该把标题改为“C DLL在C#中无法加载”。我以为你试图将一个C# DLL加载到C中! - Callum Rogers
1
你在使用哪个C动态链接库的编译器/链接器?你在dll中使用哪个版本的CRT? - Matteo Italia
使用 Visual Studio 2005。CRT? - Boris Raznikov
CRT 6.1.98的版本 - Boris Raznikov
3个回答

4

C Dll 可能有各种依赖关系。尝试使用 Dependency Walker 工具来确定是否存在这些依赖关系。


我使用了依赖项查看器,并发现 DLL 依赖项已找到。我使用 Visual Studio 2005 创建了该 DLL。目标计算机是一个并行计算机。当我将包含 CRT 的并行文件夹拿出来时,它无法运行。谢谢。 - Boris Raznikov
顺便说一句,有个人将DependencyWalker移植到现代的C#中,我刚刚使用它成功地诊断了这种类型的问题:https://github.com/lucasg/Dependencies - Overlord Zurg

2

Windows可能检测到您的应用程序存在侧-by-side版本配置问题。

例如,C dll通常会针对特定版本的Microsoft C运行时库进行编译,而该库可能未安装在您的第二台计算机上。它也不一定是C运行时库,可能是其他库。

如何诊断?

查看此文章http://blogs.msdn.com/junfeng/archive/2006/04/14/576314.aspx作为起点,但不保证。


我使用Visual Studio 2005创建了DLL。目标计算机是一个并排的计算机。当我拿着包含CRT的并排文件夹时,它无法运行。谢谢。 - Boris Raznikov

0

我从人们写的评论中获得了很多帮助,他们是正确的。我使用了:Dependency Walker工具、Process Monitor和Process Explorer。我的应用在运行时无法检测到正确的msvr80,我遇到了问题。 我安装了VC++可分发包但没有帮助。 答案在这里的另一个讨论中,它Side-by-side configuration error (Microsoft.VC80.CRT v8.0.50608.0)。 这是安全更新的问题:Microsoft.VC80.CRT v8.0.50727.4053(通过安全更新安装)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接