Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C“Dll导入失败:”;应用程序无法启动,因为其并排配置不正确";_C#_C++_Visual Studio 2010_Dll_Dllimport - Fatal编程技术网

C# C“Dll导入失败:”;应用程序无法启动,因为其并排配置不正确";

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” 我还发现:

我有一个c#net 4应用程序,使用VS2010。 我试图导入一个C++ DLL(内置在VS 2005)。 我得到了失败:

无法加载DLL“Card.DLL”:应用程序无法启动,因为其并排配置不正确。有关详细信息,请参阅应用程序事件日志或使用命令行sxstrace.exe工具。(HRESULT的异常:0x800736B1)

使用sxstrace.exe,我得到:


错误:无法解析引用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")]