EF 5ベータ版をテストするためにVisual Studio 11ベータ版をインストールしましたが、エラーが発生し続けました。
メソッドが見つかりません: 'Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean)'。
Projectは新しい空のMVC3アプリケーションで、以下はエラーの発生方法を示すコードです。
public class Blog
{
public int Id { get; set; }
public string Name { get; set; }
}
public class EFDbContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
}
public class HomeController : Controller
{
protected EFDbContext Db = new EFDbContext();
public ActionResult Index()
{
Blog B = new Blog();
B.Name = "Test";
Db.Blogs.Add(B);
Db.SaveChanges();
return View();
}
}
グーグルでエラーを探しましたが、何も起こりませんでした、そして私はエラーが何を指しているのかよくわかりません。役立つ場合に備えて、以下のスタックトレースのスニペットを追加しました。
[MissingMethodException:メソッドが見つかりません: 'Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean)'。] System.Data.Entity.Internal.LazyInternalContext.InitializeContext()+0 System.Data.Entity.Internal.InternalContext.Initialize ()+31
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)+39
System.Data.Entity.Internal.Linq.InternalSet1.Initialize() +137
1.get_InternalContext()+38 System.Data.Entity.Internal.Linq.InternalSet
System.Data.Entity.Internal.Linq.InternalSet1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) +236
1.Add(オブジェクトエンティティ)+200 System.Data.Entity.DbSet`1.Add(TEntityエンティティ)+72
System.Data.Entity.Internal.Linq.InternalSet
EF5 EntityFramework.dllを使用しているようですが、.NET 4.5の代わりに.NET 4をインストールして実行しています。
.NET 4.5を対象とする場合は、コードを実行しているマシンに.NET 4.5がインストールされていることを確認してください。 VS11は.NET 4.5をインストールしますが、開発者以外のマシンにランタイムのみをインストールすることもできます。
.NET 4をターゲットにする場合は、プロジェクトが.NET 4をターゲットにするように設定されていることを確認してから、EF5 NuGetパッケージをアンインストールして再インストールします。 NuGetはプロジェクトの再ターゲット時に使用中のアセンブリを自動的に変更しないため、アンインストールして再インストールする必要があります。
更新:
EF June CTPがまだインストールされているか、正しくアンインストールできなかった場合にも、この例外が表示されることがあります。 VS11をインストールする前に、6月のCTPを完全にアンインストールしてください。それでも問題が解決しない場合は、管理者として「開発者コマンドプロンプト」を開いて実行します。
gacutil /u System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089
それでも失敗する場合は、GACから強制的にアンインストールを試みることができます。
gacutil /uf System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089
ターゲットシステムに.net 4.5がインストールされていることを確認してください。同じメッセージが表示されましたが、ファームサーバーの1つに.net 4.5がインストールされていませんでした。
ポリシーを削除してこの問題を解決しました:
C:\ Windows\Microsoft.NET\Assembly\GAC_MSIL\policy.4.0.system.data.entity\v4.0_0.0.0.0__b77a5c561934e089\policy.4.0.system.data.entity.config
次の情報が含まれています:... bindingRedirect oldVersion = "4.0.0.0" newVersion = "4.2.0.0" ...
それがルイに役立つことを願っています
私がしたようにGACから4.2 System.Data.Entityを取り除くのに問題があり、インストーラーがそれに依存していると文句を言った場合、
G:\Program Files (x86)\Microsoft Visual Studio 2012 Ultimate\VC>gacutil /uf System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089
Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.17929
Copyright (c) Microsoft Corporation. All rights reserved.
Assembly: System.Data.Entity, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b
77a5c561934e089, processorArchitecture=MSIL
Assembly could not be uninstalled because it is required by Windows Installer
Number of assemblies uninstalled = 0
Number of failures = 0
このフォルダからレジストリのキーを取り除くことができます:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Assemblies\Global
そしてgacutil/ufコマンドを再実行します