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

ara*_*333 7 c# entity-framework

我升级的应用程序的新构建失败了.升级适用于.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 \nett\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'中定义,但无法找到它:c:\ Builds\1\SCD4\SCD4 - Test\Sources\MVC4\SCD4\packages\EntityFramework.6.0.2\lib \nett\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',但无法找到c:\ Builds\1\SCD4\SCD4 - Test\Sources\MVC4\SCD4\packages\EntityFramework.6.0.2\lib \nett\EntityFramework.dll:引用类型'System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOpt ion'声称它在'c:\ Windows\Microsoft.NET\assembly\GAC_MSIL\System.ComponentModel.DataAnnotations\v4.0_4.0.0.0__31bf3856ad364e35\System.ComponentModel.DataAnnotations.dll'中定义,但无法找到c:\ Builds\1\SCD4\SCD4 - Test\Sources\MVC4\SCD4\packages\EntityFramework.6.0.2\lib \nett\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'中定义,但无法找到它:c:\ Builds\1\SCD4\SCD4 - Test\Sources\MVC4\SCD4\packages\EntityFramework.6.0.2\lib \nett\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;
Run Code Online (Sandbox Code Playgroud)

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 节点1上的项目"C:\ Builds\2\SCD4\SCD4 - Test\Sources\MVC4\SCD4\SCD4.sln"(默认目标).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 \节点1上的SCD4\SCD4.csproj.metaproj"(2)(默认目标).项目"C:\ Builds\2\SCD4\SCD4 - Test\Sources\MVC4\SCD4\SCD4\SCD4.csproj.metaproj"(2)正在构建"C:\ Builds\2\SCD4\SCD4 - Test\Sources \节点1上的MVC4\SCD4\SCD4.Repository\SCD4.Repository.csproj.metaproj"(3)(默认目标).项目"C:\ Builds\2\SCD4\SCD4 - Test\Sources\MVC4\SCD4\SCD4.Repository\SCD4.Repository.csproj.metaproj"(3)正在构建"C:\ Builds\2\SCD4\SCD4 - 节点1上的Test\Sources\StandardClassLibrary\StandardClassLibrary\StandardClassLibrary.csproj"(4)(默认目标).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 \装配\ GAC_MSIL\System.Core程序\ v4.0_4.0.0.0__b77a5c561934e089\System.C ore.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:"c:\ Program Files\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll"/reference:C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll /参考: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 StandardCo nstants.cs Dynamic.cs UserMembership.cs OperationStatus.cs Properties\AssemblyInfo.cs RepositoryBase.cs"C:\ Users\TFSBuildAgent\AppData\Local\Temp.NETFramework,Version = v4.5.AssemblyAttributes.cs"


我该如何解决?

小智 3

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

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

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

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