C# DLL 导入失败:"The application has failed to start because its side-by-side configuration is incorrect
C# Dll Import failure: "The application has failed to start because its side-by-side configuration is incorrect"
我有一个c#.net 4应用程序,使用的是vs 2010。我正在尝试导入一个c++dll(基于2005版)。
[DllImport("Card.dll")]
我得到了失败:
无法加载DLL"Card.DLL":由于并行配置不正确,应用程序无法启动。有关详细信息,请参阅应用程序事件日志或使用命令行sxstrace.exe工具。(HRESULT:0x800736B1的异常)
使用sxstrace.exe我得到:
错误:无法解析引用Microsoft.VC80.DebugMFC,processorArchitecture="x86"
我还发现:
MFC80D.DLL和MSVCR80D.DLL缺少
请注意,这不是DebugCRT,因为这个问题是由使用调试编译的DLL而不是Release引起的。我现在使用Release编译的dll,问题是DebugMFC。
我试过任何我能在网上找到的东西。为了节省时间,我会介绍我尝试过的东西,所以我不会再收到这个建议:
1-我已经安装了Microsoft Visual C++2010 Redistributable Package+SP1+安全更新
2-我已经安装了Microsoft Visual C++2008 Redistributable Package
3-我已经安装了Microsoft Visual C++2005 Redistributable Package
4-我试着以"Release"而不是"Debug"的身份运行这个应用程序
5-我试图将entryPoint设置为DllImport
没有帮助。我仍然会犯同样的错误。除了上面列出的建议,我没有在网上看到任何其他建议。有人能帮我吗?
因为上面写着"无法解析引用Microsoft.VC80.DebugCRT,processorArchitecture="x86",这意味着您缺少对VC8.0调试crt运行时的依赖。这意味着你需要构建一个card.dll的发布版本,而不是调试版本。微软没有为调试CRT运行时提供可重新分发的软件包。这些只有视觉工作室提供。因此,构建一个card.dll的发布版本,这应该会对您的情况有所帮助。
您可以控制建筑Card.dll
吗?如果是,请看一下它是如何建造的。它必须使用正确版本的VC++(与VS2005一起提供的版本)构建,并启用清单。然后,安装2005 Redist。一揽子计划必须解决这个问题。如果您无法自己构建Card.dll
,则必须分析嵌入的清单(如果有的话),并联系作者以合作解决问题。
默认情况下,静态库链接到动态运行时。
如果在VS2005中重新构建dll,请将配置属性|C/C++|代码生成|运行库设置更改为静态运行库,以避免出现此问题。
您可以使用依赖项Walker来尝试找出dll获取的依赖项。如果它说它想要*d.dll
,那么它看起来就不是一个发布版本。请您的同事检查构建配置。
要使用调试版本,您可以尝试以下操作:
- 转到
c:Program FilesMicrosoft Visual Studio 9.0VCredistDebug_NonRedistx86
(这适用于Visual Studio 2008 x86,根据您的系统调整路径) - 将
Microsoft.VC90.DebugCRT
和Microsoft.VC90.DebugMFC
目录复制到包含可执行文件的目录中 - 调整复制目录中清单文件中的程序集版本(声明看起来像:
<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.30729.6161" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
,根据dll的需要更改9.0.30729.6161
- 尝试运行应用程序
所需的程序集版本可以在sxtrace的输出中找到,也可以在其生成目录中的*.intermediate.manifest
文件以及dll中找到。抱歉,我没有Visual Studio 2005,无法给出确切的数字。
- 在Google Kick start中提交时出错
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- C++生成文件错误"implicit entry/start for main executable"
- Valgrind 在 QThread::start() 上报告内存泄漏
- 为什么我不能调用 QMetaObject::invokeMethod(&threadObj, &QThread::start, Qt::QueuedConnection)?
- 如何将IEnumerable与Process.Start的输出事件处理程序一起使用?
- QThread start() return value
- 在Qt中获取输出:'QProcess::start()'和'QProcess:readAllStandardOutPut()'
- Android CMake "致命错误: 'bits/libc-header-start.h' 文件未找到"
- 仅在一台计算机上出现"0xc000007b Application Unable to Start Correctly"错误
- QCamera::start给出神秘的"failed to start"日志消息
- 如何设置Visual Studio来调试DLL ("Unable to start program error")
- 一个粒子太多:GL_INVALID_VALUE生成错误。<start> 不满足着色器存储缓冲区的最低对齐要求
- 解析器名称定义为默认值:%start 后"parse"警告野牛
- C++编译器错误"cannot be thread-local because it has non-POD type""
- 将类方法作为 pthread start 函数传递
- 等待多个线程启动,start() 未捕获
- 为什么"Start Debugging"比VC2010中的"attach to process"慢得多?
- C# DLL 导入失败:"The application has failed to start because its side-by-side configuration is incorrect
- 我在Visual Studio中运行了一个Qt C++项目,但缺少"the program can not start because QtCored4.dll"