leveldb库版本问题的解决

前言

在VS工程中,有的dll库版本是32位的,有的是64位的。因此在编译器中debug的过程中,没有任何问题。但是直接打开bin目录里面的exe文件,会提示错误,因此,使库版本统一成为一个需要解决的问题。

问题发现

在部署.net项目时,发现了一个问题,某些库文件无法加载,提示如下错误:
Unhandled Exception: System.BadImageFormatException: Could not load file or assembly 'xxx', ......试图加载格式不正确的程序

  1. 这个问题经过查证是由于使用到的leveldb库和.net项目中加载的库版本不对,所使用的库文件是32位的,而通过nuget加载的Leveldb.Net.dll库是只有64位或者其它platform,无法兼容x86,在运行时,程序无法识别。
  2. 另外一点,在VS工程的属性中,
    Prefer 32-bit选中图

    选中了Prefer 32-bit,因此程式以32bit mode进行运行,也导致了无法加载。

解决办法

网上有大神说使用动态加载的方式,即64位加载64位dll,32位加载32位的dll。搞了好久没有搞定,我在这里阐述一下我的解决办法吧。

  1. 下载leveldb的源码放入vs中,进行编译生成dll。或者直接下载大神已经集成好的.net工程,下载链接。
  2. 自己手动集成编译环境的大神请无视以下内容。如果下载的是已经集成好的.net工程,需要注意的是,该工程中的platform没有x86或者win32平台,需要在platform中添加一下。


    平台添加图
  3. 在编译时,选择release,平台选择Win32,这样便兼容了32位程式。


    选择平台编译
  4. 替换package文件夹中的dll文件,clean & rebuild。

这样解决完成之后,再次部署运行,可以正常运行了。

结束语

一般情况下,自己编写的dll库是不会出现这样的问题,只有当使用到第三方的dll库时(使用DllImport进行引入),才会发生,因为在使用时需要根据其编译的platform进行特殊设定,才可以使其运行。
本文列举了一种方法,使leveldb.net.dll更好的兼容项目。或许项目的特殊性使本方法不太适用于所有的项目,但是这是一种思想,到具体项目时,可以具体情况具体分析。也希望各位读者在遇到诸如此类问题可以私信我,一起找到原因,发现问题,解决问题,获取成就感和自信。

你可能感兴趣的:(leveldb库版本问题的解决)