2017-01-10 77 views
3

我目前正在编写一个桌面应用程序(没有托管在IIS或类似的.NET 4.5.2中),它使用SQLite和Entity Provider SQLite。为了让它在Visual Studio中运行,我必须安装SQLite站点中的1.0.65.0版本包,以便在Visual Studio中为SQLite提供EF6提供程序。就我所了解的情况而言,这可以像预期的那样工作,这也是实现这一目标的唯一途径。桌面应用程序+ SQLite - 版本= 1.0.65.0与版本1.0.104.0

我的应用程序,我想用目前的版本是1.0.104.0(再次,从sqlite的页面信息)。我已经成功添加了Nuget包这个版本我的应用程序,当我考虑的参考选项卡上,我可以看到System.Data.SQLiteSystem.Data.SQLite.EF6System.Data.SQLite.Linq,所有版本1.0.104.0和特定版本设置为True。复制本地设置为全部三个都为真。

所以,现在当我运行我的应用程序,并获得该行:

using (var ctx = new SmtAoiLookupEntities()) 
{ 
    foreach (var lu in ctx.Lookups.Where(d=>!string.IsNullOrEmpty(d.Aoi))) 
    { 
     ... 
    } 
} 

我收到以下错误信息:

类型的异常“System.IO.FileLoadException”发生在mscorlib.dll并未在托管/本机边界之前处理

其他信息:无法加载文件或程序集“System.Data.SQLite,Version = 1.0.65.0,Culture = neutral,PublicKeyToken = db937bc2d44ff139”或其依赖之一。定位的程序集清单定义与程序集引用不匹配。 (异常来自HRESULT:0x80131040)

由此,我明白,我的应用程序试图加载版本1.0.65.0,虽然我的所有引用指向1.0.104.0。我完全不知道我的应用程序在哪里得到想要加载1.0.65.0的想法。我甚至在文件中找到了任何对“1.0.65”的引用,但完全没有结果。

我用

gacutil -l System.Data.SQLite 

,看看哪些程序集存储在GAC - >版本1.0.104.0

现在,这才会出现,当我运行从Visual Studio内的应用程序的情况发生;如果我在Visual Studio之外将应用程序作为可执行文件运行,那么在保存上下文时会出现不同的错误。看起来这是一个应用程序错误,并且与程序集版本问题无关。我也尝试将应用程序设置为32位应用程序,问题保持不变。

的主要问题:我想能够调试在Visual Studio中的应用程序,否则这可能成为相当繁琐。任何想法如何告诉Visual Studio不要加载1.0.65.0库?

+0

尝试清理解决方案并手动删除'bin'和'obj'文件夹。 –

+0

我做了多次,但没有改变一件事。正如我所说的,该应用程序似乎在Visual Studio之外工作。 –

回答

1

解决方案中的一个项目仍然指向以前的SQLite版本。在我的情况下,这是该文件抛出错误的项目。确保解决方案中的每个项目都具有最新的软件包版本,以帮助我解决问题。

+0

不幸的是,它是解决方案中的单个项目。无论如何不依赖其他项目。现在,我决定切换到更好的支持,并远离SQLite。无论如何,要求都改变了,所以这不是一个艰难的决定。 –