【发布时间】:2016-05-03 11:24:48
【问题描述】:
我正在使用 .NET Framework 4.0、Entity Framework 6.1.3 和 Sqlite 1.0.96.0 开发 C# 应用程序。
我有一个使用SQLite、MyCompany.Data.Sqlite.Common 的程序集安装在 GAC 上(System.Data.SQLite 也安装在 GAC 上)。
我有两个错误:
'Entity Framework 之前使用了默认实例 DbConfiguration 检测到类型“SQLiteConfiguration”。一个实例 'SQLiteConfiguration' 应该设置在 使用任何功能或实体框架之前的应用程序必须 在应用程序的配置文件中注册。看 http://go.microsoft.com/fwlink/?LinkId=260883 了解更多信息。 '
为了解决这个问题,我在App.config 中添加了以下内容:
<entityFramework codeConfigurationType="MyCompany.Data.Sqlite.Common.SQLiteConfiguration, MyCompany.Data.Sqlite.Common">
但是,在将它添加到App.config 程序后,它不会从 GAC 加载它。
我必须将相同的 dll 复制到 EXEC 文件夹中才能加载并运行程序。
我认为这不是版本号问题或 dll 格式错误,因为我在 GAC 中使用的是相同的 dll。
我也将此添加到App.config:
<dependentAssembly>
<assemblyIdentity name="MyCompany.Data.Sqlite.Common" publicKeyToken="db937bc2d44ff139" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0" />
</dependentAssembly>
但我必须将 dll 复制到应用程序的文件夹中。
有什么想法吗?
【问题讨论】:
-
在 GAC 的本机等效项中,程序集是版本化的,并且具有包含哈希的所谓“强”名称 - 而当私有(与应用程序位于同一文件夹中)程序集仅加载使用程序集名称。也许类似的原则适用于此处,并且您没有指定正确版本的程序集,因此无法从 GAC 加载?只是猜测。