我升级的应用程序的新构建失败了。升级适用于.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;
我该如何解决这个问题?
答案 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因此看起来属性被忽略。