使用EntityFramework源项目而不是其程序集的解决方案无法成功启动
本文关键字:解决方案 启动 成功 程序集 EntityFramework 项目 使用 | 更新日期: 2023-09-27 18:27:04
我有一个WinForm
的项目,它使用EntityFramework 6.1.2-beta
和.NET4
,工作得很好,直到我决定用它们的源代码替换EF
程序集,以实现一些跟踪目标,所以我从项目引用中删除了EntityFramework.dll
和EntityFramework.SqlServer.dll
,并从CodePlex获得它们的源码,并将它们添加到我的解决方案中。
我将这些新的项目配置更改为DebugNet40
(因为我的项目使用.NET 4
,但EntityFramework
和EntityFramework.SqlServer
项目使用.NET 4.5
)。
它编译成功,但现在当我想运行我的项目时,我得到了以下错误:
Microsoft.VisualStudio.HostingProcess.Utilities.dll 中出现类型为"System.IO.FileLoadException"的未处理异常
其他信息:无法加载文件或程序集"EntityFramework,Version=6.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"或其依赖项之一。强名称验证失败。(HRESULT:0x8013141A的异常)
这是我的app.config
文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,
EntityFramework, Version=6.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory
type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory,
EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient"
type="System.Data.Entity.SqlServer.SqlProviderServices,
EntityFramework.SqlServer" />
</providers>
</entityFramework>
<connectionStrings>
<add name="ERPContext"
connectionString="Data Source=.;Initial Catalog=MyDb;
Persist Security Info=True;User ID=sa;password=*****"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
我也从app.config
中删除了PublicKeyToken=b77a5c561934e089"
,但问题仍然存在。
有什么想法吗?
实体框架源代码被配置为生成延迟签名的程序集(这意味着它们被标记为"将来应该用官方密钥签名")。Entity Framework的GitHub页面上的官方说明显示了如何禁用强名称验证(运行EnableSkipStrongNames
任务:build /t:EnableSkipStrongNames
),这样您就可以使用延迟签名的程序集,而无需任何人释放其私钥。这对于开发系统来说就足够了。
如果您打算发布依赖于定制的已修改实体框架DLL的产品,则应生成一个新密钥,并修改EF源代码以使用该新密钥。
您可以在Visual Studio解决方案资源管理器中右键单击项目,然后在左侧单击"签名"并取消选中签名程序集。在您的web配置中,您还需要删除公钥令牌。