C# 分布式应用程序中未找到DLL

C# 分布式应用程序中未找到DLL,c#,visual-studio-2010,dll,distribution,C#,Visual Studio 2010,Dll,Distribution,我编写了一个非常简单的Windows窗体应用程序,它调用一个非托管DLL来执行程序完成的大部分实际计算。该程序在调试和发布模式下运行良好。它还可以正确安装并在开发计算机上运行 当我试图在运行相同操作系统(64位Windows 7)的目标计算机上安装它时,问题就出现了。尽管DLL与.exe文件位于同一目录中,但我得到了一个未找到DLL的异常。当我尝试OneClick发布以及使用.msi安装文件时,会出现此异常。该错误甚至会在声明找不到文件时引用文件的位置 我的安装程序设置之一是否不正确?我是否没有

我编写了一个非常简单的Windows窗体应用程序,它调用一个非托管DLL来执行程序完成的大部分实际计算。该程序在调试和发布模式下运行良好。它还可以正确安装并在开发计算机上运行

当我试图在运行相同操作系统(64位Windows 7)的目标计算机上安装它时,问题就出现了。尽管DLL与.exe文件位于同一目录中,但我得到了一个未找到DLL的异常。当我尝试OneClick发布以及使用.msi安装文件时,会出现此异常。该错误甚至会在声明找不到文件时引用文件的位置

我的安装程序设置之一是否不正确?我是否没有在适当的位置包含DLL或引用?任何帮助或建议都将不胜感激


谢谢。

您部署的DLL可能有您尚未部署的其他依赖项。如果这些依赖项不存在,那么通常会出现这种类型的错误

更新:

MSVCR100D中的D表示它是库的调试版本。这很可能不在目标系统上,并且授权会阻止您部署它


您需要在发布模式下进行完全重新编译。完成后,DLL应以MSVCR100为目标,注意缺少D。如果没有,那么您可能有该程序集的调试版本。找到发布版本并链接到该版本。

您部署的DLL可能具有您尚未部署的其他依赖项。如果这些依赖项不存在,那么通常会出现这种类型的错误

更新:

MSVCR100D中的D表示它是库的调试版本。这很可能不在目标系统上,并且授权会阻止您部署它


您需要在发布模式下进行完全重新编译。完成后,DLL应以MSVCR100为目标,注意缺少D。如果没有,那么您可能有该程序集的调试版本。找到发布版本并链接到该版本。

如果通过调用CreateObject调用非托管代码,请确保已在目标计算机上注册非托管DLL。

如果通过调用CreateObject调用非托管代码,请确保已将目标计算机上的非托管DLL注册为好的。

在一篇关于Microsoft出现类似“未找到dll”错误的帖子中:您可以了解如何修复此问题,因为它可能是由于以下原因引起的:1 dll文件丢失或损坏;2调用该dll的注册路径可能是错误的/丢失的/损坏的。否则,您可能需要验证新的病毒/恶意软件是否存在…

在一篇关于Microsoft出现类似“未找到dll”错误的帖子中:您可以了解如何修复此问题,原因是:1 dll文件丢失或损坏,2调用该dll的注册路径可能错误/丢失/损坏以某种方式否则,您可能需要验证是否存在新的病毒/恶意软件…

非托管DLL是COM DLL还是您正在p/调用?非托管DLL是COM DLL还是您正在p/调用?添加到Chris的答案中。您可能希望使用RedGate的Reflector获取非托管DLL的依赖项列表。我使用Dependency Walker查找依赖DLL,而不是目标安装目录中包含的一个“英特尔性能原语”DLL,只有内核32和MSVCR100D,我不应该包括它们,因为它们在目标计算机的system32目录中。。。对吗?不,msvcr100d.dll甚至无法分发。只部署发布版本。msvcr100.d与Chris的答案一致。您可能希望使用RedGate的Reflector获取非托管DLL的依赖项列表。我使用Dependency Walker查找依赖DLL,而不是目标安装目录中包含的一个“英特尔性能原语”DLL,只有内核32和MSVCR100D,我不应该包括它们,因为它们在目标计算机的system32目录中。。。对吗?不,msvcr100d.dll甚至无法分发。只部署发布版本。使用msvcr100.dll