我正在尝试将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.
答案 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)
答案 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包的目录内容中找到它。