13

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

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

通过使用融合日志,我得到了这个

*** 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.
4

7 回答 7

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 兼容?您的其他程序集的目标框架是什么(如果有)

于 2012-07-17T07:29:47.350 回答
4

你确定路径正确吗?尝试删除“实体框架”引用并手动重新添加。

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

C:\PATH\TO\SOLUTION\packages\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 文件以确保它在那里被引用,并确保实体框架引用的“复制本地”属性设置为 true。如果您在 ASP.NET 项目或类似项目中使用它,您可能还必须在 web.config 文件中引用该程序集。

于 2012-07-18T18:30:52.680 回答
1
  1. 检查标志“复制本地”
  2. 检查输出文件夹中是否存在程序集 dll
  3. 检查解决方案中的参考。尝试阅读参考。
  4. 检查程序集和解决方案文件中的版本和公钥(您可以打开 Visual Studio 解决方案文件并在文本编辑器中对其进行编辑。尝试从解决方案文件中删除公钥并设置正确的版本(如果其不同))
  5. 此外,当您将某些程序集添加到对您没有的程序集的解决方案引用时,也会出现此问题。如果尝试获得正确的程序集或尝试使用您拥有的库重建程序集。

祝你好运!

于 2012-07-17T09:29:10.670 回答
1

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

于 2012-07-19T10:56:20.767 回答
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 中。

于 2012-07-19T00:16:18.900 回答
0

我最终为我正在从事的项目解决了这个问题。我最终删除了引发错误的项目的 .bin 文件夹中的所有内容。我假设这些文件仅在特定时间或 .dll 更改等时被重写,并且没有被迁移处理。删除这些文件,清理解决方案并重建似乎为我解决了问题。

于 2012-10-15T05:13:32.767 回答
0

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

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

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

不幸的是,我不知道在哪里Redirect.config。在 NuGet 包的目录内容中的任何位置都找不到它。

于 2013-12-06T03:30:59.140 回答