2012-08-03 32 views
11

我一直在努力執行EF Migrate.exe工作。使Migrate.exe工作

我的解決方案有幾個項目。遷移和實體存在於項目Data中。控制器和視圖存在於Web中。

我試過使用migrate.exe - 但是我掙扎着讓第一個參數(程序集)被接受。文檔說明:

程序集:指定包含 遷移配置類型的程序集的名稱。

我曾嘗試:

migrate.exe 「MySolution \ DataProject \ BIN \調試\ 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) 

任何想法是怎麼回事?

+0

我有同樣的問題讓我知道,如果你發現什麼是錯的。 – Zasz 2012-09-04 18:27:14

回答

31

閱讀thisthisthis

後,我已(我覺得)你需要什麼:

  1. 如果使用migrate.exe針對.NET 4集,您需要重命名重定向.config可用於packages \ EntityFramework.5.0.0 \ tools以migrate.exe.config並將其作爲migrate.exe複製到SAME目錄。爲了針對.NET 4.5程序集運行migrate.exe,您不需要此副本,則migrate.exe.config必須不存在。
  2. 實體框架DLL的正確版本必須作爲migrate.exe位於SAME目錄中。正確版本是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的依賴關係,並將其放在SAME目錄中作爲migrate.exe。
  5. 如果您將migrate.exe放在與some.dll相同的路徑中,那麼migrate.exe將能夠使用您的應用使用的相同EntityFramework.dll,並且可以加載所有依賴項,並且可以加載一些.dll沒有任何路徑如C:\Tools\migrate.exe some.dll
  6. 如果你把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\
  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 
} 
+0

這讓我走上了正軌,謝謝。我特別的問題是我在DbContext中使用了'name = MyConnectionStringName'構造函數。我猜測,但我認爲沒有顯式設置startUpConfigurationFile,migrate.exe會在其自己的migrate.exe.config文件中查找相應的連接字符串,從而導致失敗。添加指向我的配置文件的startUpConfigurationFile然後工作。 – 2016-01-19 14:03:20