升级.Net Framework 4.5的应用程序 - 无法获得正确的DataAnnotations程序集

时间:2014-02-17 16:18:13

标签: c# entity-framework

我升级的应用程序的新构建失败了。升级适用于.Net Framework 4.0到4.5和EF到版本6。 错误消息是;

  

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

在日志中我得到以下内容;

  

默认构建$ / SCD4 / SCD4.Model / SCD4.Model.csproj.metaproj   目标

     <00> 00:00建成   $ / StandardClassLibrary / StandardClassLibrary / StandardClassLibrary / StandardClassLibrary.csproj   对于默认目标。

     

00:01为默认目标构建$ / SCD4 / SCD4.Model / SCD4.Model.csproj。   C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ Microsoft.Common.targets   (847):框架的参考组件   &#34; .NETFramework,版本= 4.5版&#34;没找到。要解决此问题,请安装   此框架版本的SDK或Targeting Pack或重新定位您的   应用程序到您拥有SDK的框架版本   或安装了Targeting Pack。请注意,程序集将被解析   来自全球大会缓存(GAC)并将用于代替   参考组件。因此您的装配可能不正确   针对您想要的框架。 c:\ Builds \ 1 \ SCD4 \ SCD4 -   测试的\ Sources \ MVC4 \ SCD4 \包\ EntityFramework.6.0.2 \ LIB   et45 \ EntityFramework.dll:引用类型   &#39; System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption&#39;   声称它的定义是   &#39; c:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.ComponentModel.DataAnnotations \ v4.0_4.0.0.0__31bf3856ad364e35 \ System.ComponentModel.DataAnnotations.dll&#39;,但无法找到c: \ Builds \ 1 \ SCD4 \ SCD4 -   测试的\ Sources \ MVC4 \ SCD4 \包\ EntityFramework.6.0.2 \ LIB   et45 \ EntityFramework.dll:引用类型   &#39; System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption&#39;   声称它的定义是   &#39; c:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.ComponentModel.DataAnnotations \ v4.0_4.0.0.0__31bf3856ad364e35 \ System.ComponentModel.DataAnnotations.dll&#39;,但无法找到c: \ Builds \ 1 \ SCD4 \ SCD4 -   测试的\ Sources \ MVC4 \ SCD4 \包\ EntityFramework.6.0.2 \ LIB   et45 \ EntityFramework.dll:引用类型   &#39; System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption&#39;   声称它的定义是   &#39; c:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.ComponentModel.DataAnnotations \ v4.0_4.0.0.0__31bf3856ad364e35 \ System.ComponentModel.DataAnnotations.dll&#39;,但无法找到c: \ Builds \ 1 \ SCD4 \ SCD4 -   测试的\ Sources \ MVC4 \ SCD4 \包\ EntityFramework.6.0.2 \ LIB   et45 \ EntityFramework.dll:引用类型   &#39; System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption&#39;   声称它的定义是   &#39; c:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.ComponentModel.DataAnnotations \ v4.0_4.0.0.0__31bf3856ad364e35 \ System.ComponentModel.DataAnnotations.dll&#39;,但无法找到c: \ Builds \ 1 \ SCD4 \ SCD4 -   测试的\ Sources \ MVC4 \ SCD4 \包\ EntityFramework.6.0.2 \ LIB   et45 \ EntityFramework.dll:引用类型   &#39; System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption&#39;   声称它的定义是   &#39; c:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.ComponentModel.DataAnnotations \ v4.0_4.0.0.0__31bf3856ad364e35 \ System.ComponentModel.DataAnnotations.dll&#39;,但无法找到   Models \ Mapping \ vw_EmployeesAndJobTitlesMap.cs(24):类型名称   &#39; DatabaseGeneratedOption&#39;无法找到。这种类型已经   转发到程序集&System; Component.ComponentModel.DataAnnotations,   Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35&#39;。   考虑添加对该程序集的引用。

当我点击日志中的链接时,这条线似乎就是问题;

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不存在,但是当我看它确实存在时。


我的日志文件看起来像;

  

Build build 20/02/2014 14:38:54项目&#34; C:\ Builds \ 2 \ SCD4 \ SCD4 -   测试的\ Sources \ MVC4 \ SCD4 \ SCD4.sln&#34;在节点1上(默认目标)。   ValidateSolutionConfiguration:构建解决方案配置   &#34;调试|任何CPU&#34;。项目&#34; C:\ Builds \ 2 \ SCD4 \ SCD4 -   测试的\ Sources \ MVC4 \ SCD4 \ SCD4.sln&#34; (1)正在建设中   &#34; C:\ Builds \ 2 \ SCD4 \ SCD4 -   测试的\ Sources \ MVC4 \ SCD4 \ SCD4 \ SCD4.csproj.metaproj&#34; (2)在节点1上   (默认目标)。项目&#34; C:\ Builds \ 2 \ SCD4 \ SCD4 -   测试的\ Sources \ MVC4 \ SCD4 \ SCD4 \ SCD4.csproj.metaproj&#34; (2)正在建设中   &#34; C:\ Builds \ 2 \ SCD4 \ SCD4 -   测试的\ Sources \ MVC4 \ SCD4 \ SCD4.Repository \ SCD4.Repository.csproj.metaproj&#34;   (3)在节点1上(默认目标)。项目&#34; C:\ Builds \ 2 \ SCD4 \ SCD4 -   测试的\ Sources \ MVC4 \ SCD4 \ SCD4.Repository \ SCD4.Repository.csproj.metaproj&#34;   (3)正在构建&#34; C:\ Builds \ 2 \ SCD4 \ SCD4 -   测试的\ Sources \ StandardClassLibrary \ StandardClassLibrary \ StandardClassLibrary.csproj&#34;   (4)在节点1上(默认目标)。   C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ Microsoft.Common.targets(847,9):   警告MSB3644:框架的参考程序集   &#34; .NETFramework,版本= 4.5版&#34;没找到。要解决此问题,请安装   此框架版本的SDK或Targeting Pack或重新定位您的   应用程序到您拥有SDK的框架版本   或安装了Targeting Pack。请注意,程序集将被解析   来自全球大会缓存(GAC)并将用于代替   参考组件。因此您的装配可能不正确   针对您想要的框架。 [C:\ Builds \ 2 \ SCD4 \ SCD4 -   测试的\ Sources \ StandardClassLibrary \ StandardClassLibrary \ StandardClassLibrary.csproj]   PrepareForBuild:创建目录&#34; obj \ Debug \&#34;。   GenerateTargetFrameworkMonikerAttribute:跳过目标   &#34; GenerateTargetFrameworkMonikerAttribute&#34;因为所有输出文件都是   关于输入文件的最新信息。 CoreCompile:
  c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Csc.exe / noconfig   / nowarn:1701,1702 / nostdlib + / errorreport:prompt / warn:4   / define:DEBUG; TRACE / reference:&#34; C:\ Builds \ 2 \ SCD4 \ SCD4 -   测试的\ Sources \ MVC4 \ SCD4 \包\ EntityFramework.6.0.2 \ LIB \ net40 \ EntityFramework.dll&#34;   / reference:&#34; C:\ Builds \ 2 \ SCD4 \ SCD4 -   测试的\ Sources \ MVC4 \ SCD4 \包\ EntityFramework.6.0.2 \ LIB \ net40 \ EntityFramework.SqlServer.dll&#34;   /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_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll   /reference:C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll   /reference:C:\Windows\Microsoft.Net\assembly\GAC_32\System.Web\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.dll   / reference:&#34; c:\ Program Files \ Microsoft ASP.NET \ ASP.NET MVC   3 \组件\ System.Web.Mvc.dll程序&#34;   /reference:C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll   /reference:C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll   / debug + / debug:full / filealign:512 / optimize-   /out:obj\Debug\StandardClassLibrary.dll / target:library   EmailMessage.cs FileSystem.cs Models \ JqueryDataTableParamModel.cs   SessionObjects.cs StandardConstants.cs Dynamic.cs UserMembership.cs   OperationStatus.cs Properties \ AssemblyInfo.cs RepositoryBase.cs   &#34; C:\用户\ TFSBuildAgent \应用程序数据\本地\ Temp.NETFramework,版本= v4.5.AssemblyAttributes.cs&#34;


我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

您可以通过添加对它提到的DLL的引用来解决此问题。

在Visual Studio(2010/2012/2013)中,右键单击项目的引用,然后选择“添加引用”。

然后选择Assemblies选项卡并导航到System.ComponentModel.DataAnnotations并勾选复选框。然后选择确定,将添加引用。

只要您的cs文件中还有using System.ComponentModel.DataAnnotations;,您的项目现在应该正确构建。

答案 1 :(得分: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因此看起来属性被忽略。