当我使用 web 部署发布到暂存区时,为什么我的迁移没有自动执行?

Why aren't my migrations automatically being executed when I publish to staging using web deploy?

背景

我创建了一个网站,从 .Net Core 2.0 Web 应用程序模板开始,它现在有 2 个项目和 1 个数据上下文:

我有一个我使用的发布配置文件,当我将其发布到暂存时,迁移将作为发布的一部分进行处理,这对我来说非常有效,因为网站应用程序和模式是一次性升级的。

最近,我建立了第二个网站,从 .Net Core 2.1 Web 应用程序模板开始,它有 3 个项目和 2 个数据上下文

问题

我已经为第二个网站创建了一个暂存配置文件,在我看来它与第一个网站一样,但是当我发布时迁移不会自动得到处理。

查看构建日志,当我发布第一个网站时,它包含一个用于生成 entity framework SQL 脚本的部分:

Generating Entity framework SQL Scripts...
Executing command: dotnet ef migrations script --idempotent --output "D:\Dev\dotnet\Core\foo1\Web\obj\Staging\netcoreapp2.1\win-x64\PubTmp\EFSQLScripts\Data.ApplicationDbContext.sql" --context Data.ApplicationDbContext 
Generating Entity framework SQL Scripts completed successfully
Adding database (data source=VMFoo;initial catalog=com.foo1-staging;trusted_connection=True;multipleactiveresultsets=true)
Updating file (com.foo1.staging\Data.dll).
Updating file (com.foo1.staging\Data.pdb).
Updating file (com.foo1.staging\web.config).
Updating file (com.foo1.staging\Web.deps.json).
Updating file (com.foo1.staging\Web.dll).
Updating file (com.foo1.staging\Web.pdb).
Updating file (com.foo1.staging\Web.runtimeconfig.json).
Updating file (com.foo1.staging\Web.Views.dll).
Updating file (com.foo1.staging\Web.Views.pdb).
Adding database (data source=VMFoo;initial catalog=com.foo1-staging;trusted_connection=True;multipleactiveresultsets=true)
Adding database (sitemanifest/dbFullSql[@path='data source=VMFoo;initial catalog=com.foo1-staging;trusted_connection=True;multipleactiveresultsets=true']/sqlScript)
Publish Succeeded.

但是,当我在第二个网站上发布时,它没有:

Updating file (com.foo2.staging\web.config).
Updating file (com.foo2.staging\Web.deps.json).
Updating file (com.foo2.staging\Web.runtimeconfig.json).
Publish Succeeded.

我在 VS2017 中提高了构建任务的日志记录级别(工具 -> 选项 -> 项目和解决方案 -> 构建和 运行 -> MSBuild 项目构建输出详细程度)并且我已经跟踪它下降到不调用 GenerateEFSQLScripts 任务的解决方案的以下行:

Task "GenerateEFSQLScripts" skipped, due to false condition; ('$(_IsAspNetCoreProject)' == 'true' And '$(IsGenerateEFSQLScriptsDisabled)' != 'true' And @(EfMigrations) != '') was evaluated as ('true' == 'true' And '' != 'true' And  != '').

工作网站的日志显示:

Using "GenerateEFSQLScripts" task from assembly "C:\Program Files\dotnet\sdk.1.301\Sdks\Microsoft.NET.Sdk.Publish\build\netstandard1.0\..\..\tools\net46\Microsoft.NET.Sdk.Publish.Tasks.dll".
Generating Entity framework SQL Scripts...

看起来问题似乎与@(EfMigrations) 有关?如果是这样,任何人都可以阐明这是从哪里获取的以及我如何将迁移作为发布的一部分进行处理?

当我查看 PubTmp 文件夹中的 web.sourcemanifest.xml 文件时,有一行:

<dbfullsql path="D:\Dev\dotnet\Core\foo1\Web\obj\Staging\netcoreapp2.1\win-x64\PubTmp\EFSQLScripts\Data.ApplicationDbContext.sql" />

当然,这可能纯粹是因为 GenerateEFSQLScripts 任务没有 运行 但我想我会标记它以防有人回答我的问题。

我的特殊问题是将 appsettings.json 文件放在配置文件夹而不是项目的根目录中。

工具的工作假设是 appsettings.json 始终位于根目录中。

一个解决方案有效,因为我最初在根目录中有 appsettings.json,执行发布但后来将其移动到配置文件夹。

Microsoft 将寻求添加配置此功能的能力,因此工具将允许 appsettings.json.

的自定义位置

有关此的更多详细信息,请参见 Git:

Where is @(EfMigrations) sourced from?