C# C“Dll导入失败:”;应用程序无法启动,因为其并排配置不正确";
我有一个c#net 4应用程序,使用VS2010。 我试图导入一个C++ DLL(内置在VS 2005)。 我得到了失败: 无法加载DLL“Card.DLL”:应用程序无法启动,因为其并排配置不正确。有关详细信息,请参阅应用程序事件日志或使用命令行sxstrace.exe工具。(HRESULT的异常:0x800736B1) 使用sxstrace.exe,我得到:C# C“Dll导入失败:”;应用程序无法启动,因为其并排配置不正确";,c#,c++,visual-studio-2010,dll,dllimport,C#,C++,Visual Studio 2010,Dll,Dllimport,我有一个c#net 4应用程序,使用VS2010。 我试图导入一个C++ DLL(内置在VS 2005)。 我得到了失败: 无法加载DLL“Card.DLL”:应用程序无法启动,因为其并排配置不正确。有关详细信息,请参阅应用程序事件日志或使用命令行sxstrace.exe工具。(HRESULT的异常:0x800736B1) 使用sxstrace.exe,我得到: 错误:无法解析引用Microsoft.VC80.DebugMFC,processorArchitecture=“x86” 我还发现:
错误:无法解析引用Microsoft.VC80.DebugMFC,processorArchitecture=“x86” 我还发现: 缺少MFC80D.DLL和MSVCR80D.DLL 请注意,这不是DebugCRT,因为此问题是由使用调试编译的DLL而不是发行版引起的。我现在使用发行版编译的dll,问题是DebugMFC 我试过任何我能在网上找到的东西。为了节省时间,我将介绍我尝试过的内容,因此我不会再收到以下建议:
1 -我安装了微软Visual C++ 2010可再分发包+SP1+安全更新< /P> < P> 2 -我安装了微软Visual C++ 2008可再分发包< /P> < P> 3 -我安装了微软Visual C++ 2005可再分发包< /P> 4-我尝试以“发布”而不是“调试”的方式运行此应用程序
5-我试图将入口点设置为DllImport 没有帮助。我仍然会犯同样的错误。除了上面列出的建议,我没有在网上看到其他建议。有人能帮我吗?你能控制构建
Card.dll
?如果是,请查看它是如何构建的。它必须使用正确版本的VC++(VS2005附带的版本)构建,并启用清单。然后,安装2005 Redist。包装必须解决这个问题。如果您无法自己构建Card.dll
,则必须分析嵌入的清单(如果有的话),并与作者联系,共同解决问题。因为它说“无法解决引用Microsoft.VC80.DebugCRT,processorArchitecture=“x86,这意味着您缺少对VC 8.0的调试crt运行时的依赖项。这意味着您需要构建card.dll的发行版,而不是调试版。Microsoft不提供用于调试CRT运行时的可再发行包。这些仅随VisualStudio提供。因此,构建card.dll的发布版本,这将有助于您的情况。静态库默认链接到动态运行时
如果您在VS2005中重新构建dll,请将配置属性| C/C++|代码生成|运行时库设置更改为静态运行时以避免该问题。您可以使用它来尝试找出dll的依赖项。如果它说它想要*d.dll
,那么看起来它不是发布版本。请您的同事检查生成配置
要使用调试版本,可以尝试以下操作:
c:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug\u NonRest\x86\
(这是针对Visual Studio 2008 x86的,请根据您的系统调整路径)Microsoft.VC90.DebugCRT
和Microsoft.VC90.DebugMFC
目录复制到包含可执行文件的目录中
,根据dll需要更改9.0.30729.6161
)所需的程序集版本可以在sxstrace的输出或
*.intermediate.manifest
文件及其生成目录中的dll中找到。很抱歉,我没有Visual Studio 2005,无法给出确切的数字。引用:请查看应用程序事件日志
。它说了什么?错误:无法解决引用Microsoft.VC80.DebugCRT,processorArchitecture=“x86”构建你的C++ DLL的发布版本,而不是调试版本。我的学院给了我一个新的编译的DLL。她说这次是发布。我也犯了同样的错误。她做了什么错误,是调试版本还是其他解释?我没有收到CRT消息。我没有注意到。现在是:“无法解析引用Microsoft.VC80.DebugMFC”我这样做了,我知道get:“无法解析引用Microsoft.VC80.DebugMFC”“我不确定express 2005是否附带MFC。你必须找到答案。顺便说一句,你有没有使用dependency walker查看什么是在MFC上注入依赖项?我有C#2010 express。你能告诉我怎么做吗?我更新了我不清楚的答案。如果你能更改项目属性,它在vs2005方面。
[DllImport("Card.dll")]