实体框架5 - 无法加载文件或程序集EntityFramework,版本= 5.0.0.0

时间:2012-07-13 13:20:49

标签: c# entity-framework entity-framework-ctp5

我正在尝试将Entity Framework 5用于我的项目,但我似乎在安装程序集时遇到了一些问题。因为我最初使用nuget安装了这个,所以我不确定我需要做什么才能使它按照我的预期工作。有什么帮助我需要做些什么来解决这个问题吗?

* System.IO.FileNotFoundException:无法加载文件或程序集EntityFramework,Version = 5.0.0.0,Culture = Neutral,PublicKeyToken = b77a5c561934e089'或其中一个依赖项系统找不到指定的文件.WRN:程序集绑定日志记录已关闭。要启用程序集绑定失败日志记录,请设置注册值。 。 。 *

使用Fusion日志,我得到了这个

*** Assembly Binder Log Entry  (7/17/2012 @ 9:29:09 PM) ***

The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 11.0\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\TESTWINDOW\vstest.executionengine.x86.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = WORKALOT\Tokorie
LOG: DisplayName = Budget.Data, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Development/Summer2012BudgetApp/Budget.Service.Test/bin/Release
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = vstest.executionengine.x86.exe
Calling assembly : Budget.Lib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 11.0\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\TESTWINDOW\vstest.executionengine.x86.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Development/Summer2012BudgetApp/Budget.Service.Test/bin/Release/Budget.Data.DLL.
LOG: Attempting download of new URL file:///C:/Development/Summer2012BudgetApp/Budget.Service.Test/bin/Release/Budget.Data/Budget.Data.DLL.
LOG: Attempting download of new URL file:///C:/Development/Summer2012BudgetApp/Budget.Service.Test/bin/Release/Budget.Data.EXE.
LOG: Attempting download of new URL file:///C:/Development/Summer2012BudgetApp/Budget.Service.Test/bin/Release/Budget.Data/Budget.Data.EXE.
LOG: All probing URLs attempted and failed.

7 个答案:

答案 0 :(得分:5)

按照错误消息的建议运行融合日志工具,以获取有关运行时查找dll的位置的更多信息,以便更好地了解其失败的原因。

Scott Hanselman撰写了一篇关于Fusion-loggning的好文章,如何启用它等,然后从命令提示符处以管理员身份运行fuslogw。

<强>更新

融合日志向我们展示了运行时寻找DLL的位置,在本例中为Budget.Data,它在以下位置查找:

bin/Release/Budget.Data.DLL 
bin/Release/Budget.Data/Budget.Data.DLL
bin/Release/Budget.Data.EXE
bin/Release/Budget.Data/Budget.Data.EXE

你能验证DLL实际上是在这些目录中吗?如果是检查DLL上的目标框架(检查项目属性)?目标框架是否与EF 5.0兼容?您的其他程序集(如果有)的目标框架是什么

答案 1 :(得分:4)

您确定路径是否正确?尝试删除“Entity Framework”引用并手动重新添加它。

右键单击以添加引用,然后在此处浏览并添加dll:

  

C:\ PATH \ TO \ SOLUTION \包\ EntityFramework.5.0.0-RC \ lib中\ net45 \ EntityFramework.dll

还要确保在项目的csproj文件中设置路径(右键单击项目,卸载,再次右键单击,然后“编辑projectname.csproj”),你应该有这样的东西:

<Reference Include="EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\packages\EntityFramework.5.0.0-rc\lib\net45\EntityFramework.dll</HintPath>
</Reference>

要检查的其他内容是packages.config文件,以确保在那里引用它,并确保Entity Framework引用的“Copy Local”属性设置为true。如果您在ASP.NET项目或类似项目中使用它,则可能还必须在web.config文件中引用该程序集。

答案 2 :(得分:1)

  1. 检查标志“copy local”
  2. 检查装配文件夹
  3. 中的装配dll
  4. 检查解决方案中的参考。尝试阅读参考文献。
  5. 检查程序集的版本和公钥以及解决方案文件(您可以打开visual studio解决方案文件并在文本编辑器中对其进行编辑。尝试从解决方案文件中删除公钥,如果不同则设置正确的版本)
  6. 当您添加到解决方案的某些程序集引用您没有的程序集时,此问题也会出现问题。如果尝试获得正确的程序集或尝试使用库重建程序集。
  7. 祝你好运!

答案 3 :(得分:1)

我实际上有一天在使用版本控制(git)和ef5-rc的Nuget包时遇到了这个问题。解决这个问题的方法是从解决方案的“packages”文件夹中删除(在Windows资源管理器中删除)程序集。当我重新启动Visual Studio时Nuget给了我恢复包的机会。希望这有帮助!

答案 4 :(得分:0)

您在EntLib5中使用了哪些块?由于您是从DAL调用它,我将假设您正在调用Microsoft.Practice.EnterpriseLibrary.Data。

如果是这样,我只想指出我总是需要以下所有DLL来让EntLib5 DAAB为我工作。

Microsoft.Practices.EnterpriseLibrary.Common
Microsoft.Practices.EnterpriseLibrary.Data
Microsoft.Practices.Unity
Microsoft.Practices.Unity.Interception

缺少这些引用中的任何一个都会导致我的项目在运行时出错,即使编译正常。

我还尝试从http://www.microsoft.com/en-us/download/details.aspx?id=15104运行EntLib5安装程序,因为它将DLL粘贴到GAC中。

答案 5 :(得分:0)

我最终为我正在进行的项目解决了这个问题。我最终删除了抛出错误的项目的.bin文件夹中的所有内容。我假设这些文件只能在特定时间或.dll更改等时重写,并且不会被迁移处理。删除这些文件,清理解决方案和重建似乎解决了我的问题。

答案 6 :(得分:0)

我也遇到了这个问题。所以我做了一些环顾四周,发现了以下内容。

http://msdn.microsoft.com/en-us/data/jj618307.aspx的“常见问题”部分中,它说......

“这通常意味着您运行的是没有Redirect.config文件的.NET 4应用程序。您需要将Redirect.config复制到migrate.exe所在的位置,并将其重命名为migrate.exe.config。”

不幸的是,我不知道Redirect.config位于何处。无法在NuGet包的目录内容中找到它。