升级适用于.Net Framework 4.5的应用程序 - 无法获取正确的DataAnnotations程序集。

7

我升级的应用程序新版本构建失败了。升级是由 .Net Framework 4.0 升级到 4.5 并将 EF 升级到版本 6。

错误信息如下:

Models\Mapping\vw_EmployeesAndJobTitlesMap.cs (47): 类型名称 'DatabaseGeneratedOption' 找不到。该类型已转发到程序集 'System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'。请考虑添加对该程序集的引用。

在日志中我获得以下信息:

已为默认目标构建 $/SCD4/SCD4.Model/SCD4.Model.csproj.metaproj。 00:00 已为默认目标构建 $/StandardClassLibrary/StandardClassLibrary/StandardClassLibrary/StandardClassLibrary.csproj。 00:01 已为默认目标构建 $/SCD4/SCD4.Model/SCD4.Model.csproj。 c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets (847):未找到框架“.NETFramework,Version=v4.5”的引用程序集。要解决此问题,请安装此框架版本的 SDK 或 Targeting Pack 或将应用程序的目标重新定向到您已安装有该 SDK 或 Targeting Pack 的框架版本。请注意,程序集将从全局程序集缓存 (GAC) 解析,并将用于替代引用程序集。因此,您的程序集可能无法正确地针对您打算的框架进行定位。 c:\Builds\1\SCD4\SCD4-Test\Sources\MVC4\SCD4\packages\EntityFramework.6.0.2\lib\net45\EntityFramework.dll:对类型“System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption”的引用声称其定义在“c:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.ComponentModel.DataAnnotations\v4.0_4.0.0.0__31bf3856ad364e35\System.ComponentModel.DataAnnotations.dll”中,但找不到它。 Models\Mapping\vw_EmployeesAndJobTitlesMap.cs(24):找不到类型名称“DatabaseGeneratedOption”。该类型已被转发到程序集“System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”。考虑添加对该程序集的引用。

当我点击日志中的链接时,似乎是这一行存在问题;

using System.ComponentModel.DataAnnotations.Schema;

EF是版本6。错误消息显示c:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.ComponentModel.DataAnnotations\v4.0_4.0.0.0__31bf3856ad364e35\System.ComponentModel.DataAnnotations.dll不存在,但当我查看时,它确实存在。


我的日志文件如下;

构建于2014年02月20日14:38:54。项目C:\Builds\2\SCD4\SCD4-Test\Sources\MVC4\SCD4\SCD4.sln在节点1上(默认目标)。 ValidateSolutionConfiguration:正在构建解决方案配置“Debug|Any CPU”。项目C:\Builds\2\SCD4\SCD4-Test\Sources\MVC4\SCD4\SCD4.sln (1) 正在构建“C:\Builds\2\SCD4\SCD4-Test\Sources\MVC4\SCD4\SCD4.csproj.metaproj”(2)在节点1上(默认目标)。 项目C:\Builds\2\SCD4\SCD4-Test\Sources\MVC4\SCD4\SCD4.csproj.metaproj(2)正在构建“C:\Builds\2\SCD4\SCD4-Test\Sources\MVC4\SCD4\SCD4.Repository\SCD4.Repository.csproj.metaproj”(3) 在节点1上(默认目标)。 项目C:\Builds\2\SCD4\SCD4-Test\Sources\MVC4\SCD4\SCD4.Repository\SCD4.Repository.csproj.metaproj(3)正在构建“C:\Builds\2\SCD4\SCD4-Test\Sources\StandardClassLibrary\StandardClassLibrary\StandardClassLibrary.csproj”(4) 在节点1上(默认目标)。 c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(847,9):警告MSB3644:未找到.NETFramework,Version=v4.5的参考程序集。请安装此框架版本的SDK或Targeting Pack,或将您的应用程序重新定位到您已安装其SDK或Targeting Pack的框架版本。请注意,程序集将从全局程序集缓存(GAC)解析,并将用于代替参考程序集。因此,可能无法正确地将您的程序集针对您打算的框架进行定位。[C:\Builds\2\SCD4\SCD4-Test\Sources\StandardClassLibrary\StandardClassLibrary\StandardClassLibrary.csproj] PrepareForBuild:正在创建目录“obj\Debug\"。 GenerateTargetFrameworkMonikerAttribute:跳过目标“GenerateTargetFrameworkMonikerAttribute”,因为所有输出文件都是根据输入文件更新的。 CoreCompile: c:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Builds\2\SCD4\SCD4-Test\Sources\MVC4\SCD4\packages\EntityFramework.6.0.2\lib\net40\EntityFramework.dll" /reference:"C:\Builds\2\SCD4\SCD4-Test\Sources\MVC4\SCD4\packages\EntityFramework.6.0.2\lib\net40\EntityFramework.SqlServer.dll" /reference:C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.CSharp.dll /reference:c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll /reference:C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ComponentModel.DataAnnotations\v4.0_4.0.0.0__31bf3856ad364e35\System.ComponentModel.DataAnnotations.dll /reference:C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll /reference:C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll /reference:C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.DataSetExtensions\v4.0_4.0.0.0__b77a5c561934e089\System.Data.DataSetExtensions.dll /reference:C:\Windows\Microsoft.Net\assembly\GAC

我该如何解决这个问题?


抱歉问一个显而易见的问题,但您是否检查了 web.config 文件以确保它没有引用旧版 EF? - JTMon
我检查了那个,那不是问题的原因。 - arame3333
我有类似的问题,在这里没有找到解决方案:http://stackoverflow.com/questions/24112679/database-project-assembly-was-not-found-in-the-sql-catalog - Vu Nguyen
2个回答

3
你可以通过添加所提到的DLL的引用来解决此问题。
在Visual Studio(2010/2012/2013)中,右键单击项目的引用,然后选择“添加引用”。
然后选择“程序集”选项卡,导航到System.ComponentModel.DataAnnotations并选中复选框。然后选择确定,引用将被添加。
只要您的cs文件中也有using System.ComponentModel.DataAnnotations;,您的项目现在应该能够正确构建。

尝试过了,没有用。我必须承认,我本以为我已经尝试过那个方法了,因为那是显而易见的事情,但我还是决定再次确认一下。 - arame3333
具体来说,它使用的是System.ComponentModel.DataAnnotations.Schema,但根据日志构建失败了,我最好将其放在问题中。 - arame3333
你确定你已经安装了完整版本的.NET 4.5吗? 看起来你可能缺少一些.NET 4.5组件。 - Rob Aston

3
在.NET Framework 4.5中,EF的注释已从EF.dll移动到System.ComponentModel.Annotations程序集中。
看起来即使你针对.NET Framework 4.5,仍然在某个地方引用了EntityFramework.dll v4.4.0.0
因此,您的类使用4.4.0.0程序集中的属性进行编译。
在运行时,使用较新的EntityFramework.dll(5.0.0.0),并查找System.ComponentModel.DataAnnotations程序集的属性 - 无法找到,因为您使用的是来自EF.dll 4.4.0.0的属性,因此似乎属性被忽略了。

我一直在寻找旧版本的EF,但没有找到。我想知道现在该怎么办? - arame3333

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接