Получение Migrate.exe для работы

Я работаю над выполнением EF Migrate.exe для работы.

У моего решения есть несколько проектов. Миграции и сущности живут в проекте Data. Контроллеры и представления живут в Интернете.

Я попытался использовать 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)

Любая идея, что происходит не так?

Ответ 1

После прочтения этого, этого и this

У меня (я думаю), что вам нужно:

  • Если вы используете migrate.exe для сборки .NET 4, вам НЕОБХОДИМО переименовать Redirect.config, доступный в пакетах \EntityFramework.5.0.0\tools, для migrate.exe.config и скопировать его в тот же каталог, что и перенос. Exe. Для запуска migrate.exe против сборки .NET 4.5 вам НЕ нужна эта копия, файл migrate.exe.config не должен существовать.
  • Правильная версия DLL-структуры сущности должна находиться в каталоге SAME как migrate.exe. Правильная версия - это пакеты\EntityFramework.5.0.0\lib\net40\для запуска migrate.exe для сборки .NET 4. Правильная версия - это пакеты\EntityFramework.5.0.0\lib\net45\для запуска migrate.exe на сборке .NET 4.5.
  • Если вы укажете /StartUpDirectory = не укажете путь для/сборки: C:\Tools\migrate.exe some.dll /StartUpDirectory=C:\Project\bin\.
  • Если вы не укажете каталог автозагрузки, вам нужно указать полный путь в примере /assembly: C:\Tools\migrate.exe C:\Project\bin\some.dll - В этом случае migrate.exe не сможет загружать зависимости some.dll, если только вы поместите все зависимости some.dll и поместите их в каталог SAME как файл migrate.exe.
  • Если вы поместите файл migrate.exe по тому же пути, что и ваш файл some.dll, то migrate.exe сможет использовать тот же EntityFramework.dll, который использует ваше приложение, и может загружать все зависимости и может загружать некоторые .dll без какого-либо пути, например C:\Tools\migrate.exe some.dll
  • Если вы поместите файл migrate.exe в отдельную папку инструментов, например Im, для нее нужна правильная версия EntityFramework.dll в каталоге SAME как файл migrate.exe, для этого потребуется предложение /StartUpDirectory=<the path where you target dll is present>, и вы должны указать имя сборки без пути: C:\Tools\migrate.exe some.dll /StartUpDirectory=C:\Project\bin\
  • Вот, что я использую:
$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
}

Ответ 2

Я ответил на аналогичный вопрос здесь, как переопределить строку соединения через параметры migrate.exe. Мне еще нужно заставить его работать без указания файла web/app.config.

fooobar.com/info/249134/...