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

时间:2014-10-20 10:34:59

标签: c# entity-framework configuration .net-4.0 app-config

我有一个WinForm项目使用EntityFramework 6.1.2-beta.NET4,它工作正常,直到我决定用其源代码替换EF程序集,进行一些跟踪目标,因此我从项目引用中删除了EntityFramework.dllEntityFramework.SqlServer.dll,并从CodePlex获取源代码并将其添加到我的解决方案中。

我将这些新项目配置更改为DebugNet40(因为我的项目与.NET 4一起使用,但EntityFrameworkEntityFramework.SqlServer项目使用.NET 4.5)。< / p>

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

  

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>

我也从PublicKeyToken=b77a5c561934e089"删除了app.config,但问题仍然存在。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

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

如果您打算发布依赖于自定义修改的Entity Framework DLL的产品,则应生成新密钥,并修改EF源代码以使用该新密钥。

答案 1 :(得分:1)

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