publish/deployment 期间 EF Core RC2 迁移失败

EF Core RC2 migrations failing during publish/deployment

当运行为小测试发布时ASP.NET核心MVC项目我自动遇到一些困难运行针对实时数据库的迁移。

如果我同时使用设置/数据库/默认连接/在运行时间使用此连接字符串和设置/数据库/Entity Framework Migrations / ApplicationDbContext 未选中然后站点发布正常,但数据库如预期的那样保持不变。

如果我在设置/数据库/默认连接/在运行时间使用此连接字符串进行发布,那么它似乎将我的整个开发数据库复制到实时服务器,包括所有数据。绝对不是我需要的。

如果我在 Settings/Databases/Entity FrameworkMigrations/ApplicationDbContext 的情况下发布,那么我会收到以下错误:

Configuring the following project for use with IIS: 'C:\Users\User\AppData\Local\Temp\PublishTemp\TestProject57'
Updating web.config at 'C:\Users\User\AppData\Local\Temp\PublishTemp\TestProject57\web.config'
Configuring project completed successfully
publish: Published to C:\Users\User\AppData\Local\Temp\PublishTemp\TestProject57
Published 1/1 projects successfully
Publishing with publish method [MSDeploy]
Executing command ["C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe" -source:manifest='C:\Users\User\AppData\Local\Temp\PublishTemp\obj\SourceManifest.xml' -dest:manifest='C:\Users\User\AppData\Local\Temp\PublishTemp\obj\DestManifest.xml',ComputerName='https://xxx:8172/msdeploy.axd',UserName='xxx',Password='{PASSWORD-REMOVED-FROM-LOG}',IncludeAcls='False',AuthType='Basic' -verb:sync -enablerule:AppOffline -retryAttempts:20 -allowUntrusted]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Publishing.targets(406,5): Error : Error: (08/06/2016 08:29:36) An error occurred when the request was processed on the remote computer.
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Publishing.targets(406,5): Error : Error: Could not find a part of the path 'C:\Users\User\AppData\Local\Temp\PublishTemp\obj\TestProject.Models.Database.ApplicationDbContext.sql'.
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Publishing.targets(406,5): Error :    at Microsoft.Web.Deployment.NativeMethods.RaiseIOExceptionFromErrorCode(Win32ErrorCode errorCode, String maybeFullPath)
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Publishing.targets(406,5): Error :    at Microsoft.Web.Deployment.FileStreamEx.CreateInstance(String path, FileMode fileMode, FileAccess fileAccess, FileShare fileShare, Nullable`1 fileLength)
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Publishing.targets(406,5): Error :    at Microsoft.Web.Deployment.ReadWriteScriptFileProvider.GetFileStream()
Info: Using ID 'xxx' for connections to the remote server.
Info: Adding child sitemanifest (C:\Users\User\AppData\Local\Temp\PublishTemp\obj\TestProject.Models.Database.ApplicationDbContext.sql).
Info: Using ID 'xxx' for connections to the remote server.
Info: Updating file (TestProject\web.config).
Info: Updating file (TestProject\wwwroot\css\site.min.css).
Info: Adding child sitemanifest (C:\Users\User\AppData\Local\Temp\PublishTemp\obj\TestProject.Models.Database.ApplicationDbContext.sql).
Info: Adding database (sitemanifest/dbFullSql[@path='C:\Users\User\AppData\Local\Temp\PublishTemp\obj\TestProject.Models.Database.ApplicationDbContext.sql']/sqlScript)

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Publishing.targets(406,5): Error :    at Microsoft.Web.Deployment.ReadWriteScriptFileProvider.Add(DeploymentObject source, Boolean whatIf)
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Publishing.targets(406,5): Error :    at Microsoft.Web.Deployment.DeploymentObject.AddChild(DeploymentObject source, Int32 position, DeploymentSyncContext syncContext)
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Publishing.targets(406,5): Error :    at Microsoft.Web.Deployment.DeploymentSyncContext.HandleAddChild(DeploymentObject destParent, DeploymentObject sourceObject, Int32 position)
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Publishing.targets(406,5): Error :    at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject dest, DeploymentObject source)
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Publishing.targets(406,5): Error :    at Microsoft.Web.Deployment.DeploymentSyncContext.HandleAddChild(DeploymentObject destParent, DeploymentObject sourceObject, Int32 position)
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Publishing.targets(406,5): Error :    at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject dest, DeploymentObject source)
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Publishing.targets(406,5): Error :    at Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync(DeploymentObject destinationObject, DeploymentObject sourceObject)
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Publishing.targets(406,5): Error :    at Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject, DeploymentSyncOptions syncOptions, PayloadTable payloadTable, ContentRootTable contentRootTable, Nullable`1 syncPassId, String syncSessionId)
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Publishing.targets(406,5): Error :    at Microsoft.Web.Deployment.DeploymentAgent.HandleSync(DeploymentAgentAsyncData asyncData, Nullable`1 passId, String user, String siteName)
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Publishing.targets(406,5): Error : Error count: 1.

1>Publish failed due to build errors. Check the error list for more details.

如果我在 Preview[=] 上的 Entity Framework Migrations 下单击 Preview Migration,则一切正常34=] 发布对话框的选项卡,复制生成的 SQL 迁移,然后 运行 手动对服务器进行复制。此外,一旦正确应用了迁移,应用程序本身 运行 就会完美无缺 - 失败点特别是在发布过程尝试应用迁移时。

我的连接字符串也是相同的,因为开发和实时都有一个名称相同的数据库并使用集成安全性,因为网站在我手动 运行 迁移后工作,必须正确配置。

我真正想做的是在检查 运行 Settings / Databases / Entity Framework Migrations / ApplicationDbContext 时深入了解错误,因为我很确定这是我想要的选项。该错误听起来像是在尝试 运行 服务器上的一个 SQL 文件,该文件的路径是我的开发机器的本地路径,但我很困惑。

这是使用 EF 迁移发布的 preview1 工具中的一个问题。这已得到修复 - https://github.com/aspnet/vsweb-publish/commit/b46d54f74d7298e65dde1622bda340af3b23713f

解决这个问题: 1. 将工具更新到 Preview2 版本。如果您已有 publishprofile 和 ps1 文件,请删除 ps1 文件并发布。这将关闭 ps1 的较新版本。 https://go.microsoft.com/fwlink/?LinkId=817245 2.复制这个文件的内容 https://raw.githubusercontent.com/aspnet/vsweb-publish/master/publish-module.psm1 到 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\Publish\Scripts.1.0\publish-module.psm1 (根据安装的工具,它会是 1.1.0 或 1.2.0。)

这应该可以解决问题。 使用 EF 迁移将 ASP.NET 核心应用发布到应用服务的详细演练 https://dotnetpublish.wordpress.com/2016/07/05/publish-an-asp-net-core-web-app-with-ef-migrations-to-azure-appservice/