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 位于相同的目录中。正确的版本是 packages\EntityFramework.5.0.0\lib\net40\ 用于针对 .NET 4 程序集运行 migrate.exe。正确的版本是 packages\EntityFramework.5.0.0\lib\net45\ 用于针对 .NET 4.5 程序集运行 migrate.exe
  3. 如果您指定 /StartUpDirectory=,请不要指定 /assembly 示例的路径:C:\Tools\migrate.exe some.dll /StartUpDirectory=C:\Project\bin\
  4. 如果不指定启动目录,则需要在 /assembly 示例中指定完整路径:C:\Tools\migrate.exe C:\Project\bin\some.dll- 在这种情况下,migrate.exe 将无法加载 some.dll 的依赖项,除非您将所有 some.dll 的依赖项并将其放在与 migrate.exe 相同的目录中。
  5. 如果您将 migrate.exe 与您的 some.dll 放在同一路径中,则 migrate.exe 将能够使用您的应用程序使用的相同 EntityFramework.dll,并且可以加载所有依赖项,并且可以加载 some.dll 而无需任何路径C:\Tools\migrate.exe some.dll
  6. 如果您将 migrate.exe 放在一个单独的工具文件夹中,例如 Im 这样做,它需要与 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 回答