部署Dotnet核心实体框架迁移

时间:2017-06-13 21:58:28

标签: .net-core entity-framework-core octopus-deploy

我正在开发一个新的.netcore api项目。我正在尝试使用章鱼部署应用程序。

我需要帮助从命令行执行迁移,我没有得到很多帮助。如果有人可以帮助我,那将会有所帮助。

这是我到目前为止所尝试的内容: 我已经借助以下链接来提出解决方案,但它对我来说并不适用。

https://www.benday.com/2017/03/17/deploy-entity-framework-core-migrations-from-a-dll/

我必须对脚本进行一些修改才能正确设置dll路径。 以下是它现在的样子

set EfMigrationsNamespace=%Dummy.WebAPI 
set EfMigrationsDllName=%Dummy.WebAPI.deps.dll 
set EfMigrationsDllDepsJson=%Dummy.WebAPI.deps.json 
set EfMigrationsStartupAssembly=%Dummy.Data.dll 
set DllDir=%cd% 
set PathToNuGetPackages=%USERPROFILE%\.nuget\packages 
set PathToEfDll=%PathToNuGetPackages%\microsoft.entityframeworkcore.tools\1.1.1\tools\netcoreapp1.0\ef.dll
ECHO %PathToEfDll%

dotnet exec --depsfile .\%EfMigrationsDllDepsJson% --additionalprobingpath %PathToNuGetPackages% %PathToEfDll% database update --assembly .\%EfMigrationsDllName% --startup-assembly .\%EfMigrationsStartupAssembly% --project-dir . --content-root %DllDir% --data-dir %DllDir% --verbose --root-namespace %EfMigrationsNamespace%

然而,脚本会抛出绑定错误的索引,这对我来说非常困惑。这是例外。

System.IndexOutOfRangeException:索引超出了数组的范围。    在Microsoft.DotNet.Cli.CommandLine.CommandLineApplication.ParseOption(Boolean isLongOption,CommandLineApplication c ommand,String [] args,Int32& index,CommandOption&选项)    在Microsoft.DotNet.Cli.CommandLine.CommandLineApplication.Execute(String [] args)    在Microsoft.EntityFrameworkCore.Tools.Program.Main(String [] args) 索引超出了数组的范围。

这个错误的任何线索?或者,如果我采取任何其他方法?

1 个答案:

答案 0 :(得分:1)

似乎dotnet exec命令未正确构建,因为它在解析命令时遇到问题。

我使用dotnet core 2-preview并且必须稍微更改批处理文件。我现在为我工作:

set EfMigrationsNamespace=%1
set EfMigrationsDllName=%1.dll
set EfMigrationsDllDepsJson=%1.deps.json
set DllDir=%cd%
set PathToNuGetPackages=%USERPROFILE%\.nuget\packages
set PathToEfDll=%PathToNuGetPackages%\microsoft.entityframeworkcore.tools\2.0.0-preview2-final\tools\netcoreapp2.0\ef.dll

dotnet exec --depsfile .\%EfMigrationsDllDepsJson% --additionalprobingpath %PathToNuGetPackages% %PathToEfDll% database update --assembly .\%EfMigrationsDllName% --startup-assembly .\%EfMigrationsDllName% --project-dir . --data-dir %DllDir% --verbose --root-namespace %EfMigrationsNamespace%