12

EF Migrate.exe の実行に苦労しています。

私のソリューションにはいくつかのプロジェクトがあります。移行とエンティティはプロジェクト データに存在します。コントローラーとビューは Web に存在します。

migrate.exe を使用してみましたが、最初の引数 (アセンブリ) を受け入れるのに苦労しています。ドキュメンテーションは言う:

アセンブリ: 移行構成の種類を含むアセンブリの名前を指定します。

私が試してみました:

migrate.exe "MySolution\DataProject\bin\Debug\Data.dll"

ERROR: Could not load file or assembly 'D:\\MySolution\\Data\\bin\\Debug\\Data' or one of its dep
endencies. The given assembly name or codebase was invalid. (Exception from HRES
ULT: 0x80131047)

何がうまくいかないのですか?

4

2 に答える 2

33

これこれこれを読んだ後

私はあなたが必要とするものを持っています:

  1. .NET 4 アセンブリに対して migrate.exe を使用する場合は、packages\EntityFramework.5.0.0\tools にある Redirect.config の名前を migrate.exe.config に変更し、これを migrate.exe と同じディレクトリにコピーする必要があります。.NET 4.5 アセンブリに対して migrate.exe を実行する場合、このコピーは必要ありません。migrate.exe.config が存在してはなりません。
  2. エンティティ フレームワーク DLL の正しいバージョンは、migrate.exe と同じディレクトリにある必要があります。.NET 4 アセンブリに対して migrate.exe を実行するための正しいバージョンは、packages\EntityFramework.5.0.0\lib\net40\ です。.NET 4.5 アセンブリに対して migrate.exe を実行するための正しいバージョンは、packages\EntityFramework.5.0.0\lib\net45\ です。
  3. /StartUpDirectory= を指定する場合は、/assembly example のパスを指定しないでくださいC:\Tools\migrate.exe some.dll /StartUpDirectory=C:\Project\bin\
  4. スタートアップ ディレクトリを指定しない場合は、/assembly の例でフル パスを指定する必要がありますC:\Tools\migrate.exe C:\Project\bin\some.dll。依存関係を削除し、migrate.exe と同じディレクトリに配置します。
  5. migrate.exe を some.dll と同じパスに配置すると、migrate.exe はアプリが使用するのと同じ EntityFramework.dll を使用できるようになり、すべての依存関係を読み込むことができ、some.dll なしで読み込むことができます。のような任意のパスC:\Tools\migrate.exe some.dll
  6. 私が行っているように、migrate.exe を別のツール フォルダーに配置する場合、migrate.exe と同じディレクトリに正しいバージョンの EntityFramework.dll が必要です。/StartUpDirectory=<the path where you target dll is present>句が必要であり、アセンブリの名前を指定する必要があります。のようなパス:C:\Tools\migrate.exe some.dll /StartUpDirectory=C:\Project\bin\
  7. 私が使用するpowershellコマンドは次のとおりです。
$SolutionPath = (Resolve-Path '..').Path
$ToolsPath = "$SolutionPath\Build\Lib\"

task db  { 
  $migrator = $ToolsPath + 'Migrations\migrate.exe'  
  $migrateCommand = "$migrator zasz_me.dll /StartUpDirectory=$SolutionPath\zasz.me\bin\ /connectionStringName:FullContext /startUpConfigurationFile:$SolutionPath\zasz.me\Web.config /verbose"
  Write-Host $migrateCommand
  Invoke-Expression $migrateCommand
}
于 2012-09-04T19:29:24.983 に答える
1

パラメーターを介して接続文字列をmigrate.exeに上書きする方法について、同様の質問に答えました。web/app.config ファイルを指定せずに動作させるにはまだ必要です。

https://stackoverflow.com/a/14138797/134761

于 2013-01-03T12:37:27.773 に答える