C# 使用EntityFramework源项目而不是其程序集的解决方案无法成功启动

C# 使用EntityFramework源项目而不是其程序集的解决方案无法成功启动,c#,entity-framework,configuration,.net-4.0,app-config,C#,Entity Framework,Configuration,.net 4.0,App Config,我有一个WinForms项目,它使用EntityFramework 6.1.2-beta和.NET4,它工作得很好,直到我决定用它们的源代码替换EF程序集,以实现一些跟踪目标,因此,我从我的项目引用中删除了EntityFramework.dll和EntityFramework.SqlServer.dll,并从中获取它们的源代码,然后将它们添加到我的解决方案中 我将这些新项目配置更改为DebugNet40(因为我的项目使用.net4,但是EntityFramework和EntityFramewor

我有一个
WinForm
s项目,它使用
EntityFramework 6.1.2-beta
.NET4
,它工作得很好,直到我决定用它们的源代码替换
EF
程序集,以实现一些跟踪目标,因此,我从我的项目引用中删除了
EntityFramework.dll
EntityFramework.SqlServer.dll
,并从中获取它们的源代码,然后将它们添加到我的解决方案中

我将这些新项目配置更改为
DebugNet40
(因为我的项目使用
.net4
,但是
EntityFramework
EntityFramework.SqlServer
项目使用
.net4.5

它成功编译,但现在当我想运行我的项目时,出现以下错误:

Microsoft.VisualStudio.HostingProcess.Utilities.dll中发生类型为“System.IO.FileLoadException”的未处理异常

其他信息:无法加载文件或程序集“EntityFramework,版本=6.0.0.0,区域性=中性,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“
,但问题仍然存在


有什么想法吗?

实体框架源代码被配置为生成延迟签名程序集(这意味着它们被标记为“将来应该使用官方密钥进行签名”)。中的官方说明显示了如何禁用强名称验证(运行
EnableSkipStrongNames
任务:
build/t:EnableSkipStrongNames
),这样您就可以使用延迟签名的程序集,而无需任何人释放其私钥。这对于开发系统来说已经足够了


如果您打算根据自定义的修改实体框架DLL发布产品,则应生成一个新密钥,并修改EF源代码以使用该新密钥。

实体框架源代码配置为生成延迟签名程序集(这意味着它们标记为“将来应使用官方密钥进行签名。)。的官方说明显示了如何禁用强名称验证(运行
EnableSkipStrongNames
任务:
build/t:EnableSkipStrongNames
),这样您就可以使用延迟签名的程序集,而无需任何人释放其私钥。这对于开发系统来说已经足够了


如果您打算发布依赖于自定义构建的修改实体框架DLL的产品,则应生成一个新密钥,并修改EF源代码以使用该新密钥。

您可以在Visual Studio解决方案资源管理器中右键单击该项目,然后在左侧签名并取消选中“签名程序集”。在web配置中,您还需要重新设置移动公钥令牌。

您可以在Visual Studio解决方案资源管理器中右键单击该项目,然后在左侧签名并取消选中签名程序集。在您的web配置中,您还需要删除公钥令牌。

@Jarekczek感谢您的编辑,新的GitHub wiki上提供了文档,并更新了一些内容。@Jarekczek感谢您的帮助新的GitHub wiki上提供了编辑文档,并更新了一些内容。