9
 The type 'System.ComponentModel.DataAnnotations.MaxLengthAttribute' 
 exists in both 

 [path...]\packages\EntityFramework.4.3.1\lib\net40\EntityFramework.dll 

 and

'c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework
\.NETFramework\v4.5\System.ComponentModel.DataAnnotations.dll'  

今、msdnで、EntityFramework 参照 (nuget パッケージによって追加された) を除外しても安全であることを読みました。ただし、これを行うと、DbModelBuilder クラスが EntityFramework dll に存在するため、DBContext を適切に作成できません。また、EntityFramework 参照を削除すると、他のいくつかの重要なクラスが欠落しているため、これは古くて無関係なソリューションになりました。

更新 (曖昧さ回避) :System.ComponentModel.DataAnnotations.dllEntityFramework.dll includeの両方System.ComponentModel.DataAnnotations.MaxLengthAttribute。問題は、各 dll に、EF コード ファーストの設計に不可欠な他のクラスも含まれていることです。例えば:

EntityFramework.dll:
 - System.Data.Entity.DbModelBuilder

System.ComponentModel.DataAnnotations.dll:
 - System.ComponentModel.DataAnnotations.RegularExpressionAttribute
4

2 に答える 2

15

このステートメントをクラスの先頭に追加します

 using System.ComponentModel.DataAnnotations;

System.ComponentModel.DataAnnotationsEntityFramework.dll名前空間はとに分散されていSystem.ComponontModel.DataAnnotations.dllます。したがって、DataAnnotations を利用するには、プロジェクトで両方への参照を追加する必要があります。

MaxLenth 属性は にありEntityFramework.dllます。そのため、プロジェクト参照セクションにその dll への参照があることを確認してください。

ここに画像の説明を入力

EDIT : .NET Framework 4.5 以降、この名前空間はSystem.ComponentModel.DataAnnotations.dll. したがって、Entity Framework 4.3.1 以下で .NET Framework 4.5 を使用すると、この競合が発生します。解決策は、.NET 4.5 を使い続けるか、.NET 4 にダウングレードして EntityFramework 4.3.1 を使用する場合は、Entity Framework 1.50 ベータ 1/2 リリースに切り替えることです。

msdnドキュメントから。

Entity Framework 5.0 Beta 1 以降、EntityFramework.dll にはデータ注釈の定義が含まれていません。これらの定義は System.ComponentModel.DataAnnotations.dll に移動され、System.ComponentModel.DataAnnotations.Schema 名前空間で定義されています。

于 2012-05-11T13:36:45.900 に答える
7

EF5を使用するようにプロジェクトをアップグレードするか、ビルドマシンを.NetFramework4にダウングレードするオプションがありませんでした。

しかし、これを解決する方法があります!Visual Studio 2012をインストールすると、次のフォルダーが追加されます(特に)。

C:\ Program Files \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0

VSでは、4.0を対象とするプロジェクトを開き、System.ComponentModel.DataAnnotationsへの参照のプロパティを確認すると、パスがGACではなく上記の場所を指していることがわかります。

このフォルダーには、元のFramework4.0アセンブリが含まれています。それらがマシン上に存在する場合、MSBuildなどは、4.0を対象とするプロジェクトをビルドするときに、4.5がGACに配置する変更されたものではなく、これらを参照します。

私たちの場合、これは、VSがインストールされている開発マシンから同じ場所にあるビルドサーバーにそのフォルダーをコピーすることで問題を修正できることを意味しました。(Nbこのフォルダーをコピーするだけでよく、ビルドサーバーにVSをインストールする必要はありませんでした)。

詳細はこちら: http: //marcgravell.blogspot.co.uk/2012/09/iterator-blocks-missing-methods-and-net.html

これが他の誰かに役立つことを願っています!

于 2013-02-21T08:29:57.617 に答える