定期我得到以下异常:

无法加载DLL 'SQLite.Interop.dll':无法找到指定的模块。(异常来自HRESULT: 0x8007007E)

我使用的是1.0.82.0。在VS2010, Win7 64操作系统下使用nuget安装。

一旦异常开始出现,它就会不断出现——在调试和发布中,在VS内部或外部运行应用程序。

阻止它的唯一方法就是退出并重新登录。不抛出异常并加载dll。 它可以工作几天,但之后又会坏掉。

有人见过这样的情况吗,有解决方案吗?


当前回答

我已经开始使用Costura了。Fody可以打包(.net)程序集,并嵌入和预加载本地dll。这也有助于以后的分发,因为您可以发送一个文件。

Install Costura Fody from Nuget. In your C# project create a folder called costrua32. In there add any native dlls you which C# to load. Once you have added them to this folder. Click on the properties window and change build action to "Embedded Resource" Finally you need to amend the XML file called FodyWeavers.xml as follows. Here I am specifying load the sql dll first. (note you drop the .dll) Weavers Costura PreloadOrder SQLite.Interop tbb_debug tbb /PreloadOrder> /Costura /Weavers

这样做的好处是,您不必编写任何构建前或构建后事件,最终产品完全封装在一个较大的文件中。

其他回答

大会上会有竞争吗?检查DLL上是否有其他具有文件锁的应用程序。

如果是这个原因,使用Sysinternal的Process Explorer之类的工具来发现有问题的程序应该很容易。

HTH, 粘土

我有这个问题,因为Visual c++ 2010可重分发没有安装在我的电脑。如果你还没有安装Visual c++ 2010 redistributable,下载并安装这个(检查x86或64 dll)。

如果您试图在64位项目中运行32位dll,也可能会出现此错误。

当我在x86和x64文件夹中放置相同的文件(32位版本的SQLite.Interop.dll)时,我得到了这个。

这是我在我的项目中解决它的方法。

它正在工作,当一位同事提交他的更改时,我收到了“无法加载DLL 'SQLite.Interop.dll'”异常。

区别项目的.csproj文件,这是在NON-WORKING版本中:

<ItemGroup>
     <Content Include="x64\SQLite.Interop.dll" />
     <Content Include="x86\SQLite.Interop.dll" />
</ItemGroup>

下面是WORKING版本的内容:

<ItemGroup>
     <Content Include="x64\SQLite.Interop.dll">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      </Content>
      <Content Include="x86\SQLite.Interop.dll">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      </Content>
</ItemGroup>

在返回之后,我没有收到异常。DLL文件被转储到适当的Debug\x64 (etc)文件夹中。

扩展Kugel的回答,这对我来说是有效的(VS2015 Enterprise),利用dll中的SQLite,可以在构建和测试后从主项目中删除Nuget包:

1.安装Nuget包到主项目。

Install-Package System.Data.SQLite

2.构建应用程序并测试Sqlite连接是否正常工作:

select * from sqlite_master

3.从主版本卸载Nuget包。

UnInstall-Package System.Data.SQLite

4.手动删除SQLite和EntityFramework的dll引用:

System.Data.SQLite
System.Data.SQLite.EF6
System.Data.SQLite.Linq

从主项目的“包”中删除Xml引用。配置”XML文件。

这对我来说很有效,使我的项目保持干净。