Почему мои миграции не выполняются автоматически, когда я публикую в промежуточной среде с помощью веб-развертывания?

Задний план

Я создал созданный мной веб-сайт, начиная с шаблона веб-приложения .Net Core 2.0, который теперь имеет 2 проекта и 1 контекст данных:

  • проект данных, содержащий модели данных идентичности и веб-сайтов
  • веб-проект, содержащий MVC

У меня есть профиль публикации, который я использую, и когда я публикую его для промежуточной обработки, миграции обрабатываются как часть публикации, что хорошо работает для меня, поскольку приложение и схема веб-сайта обновляются за один раз.

Совсем недавно я создал второй веб-сайт, начиная с шаблона веб-приложения .Net Core 2.1, который имеет 3 проекта и 2 контекста данных.

  • проект данных, включая модели данных веб-сайтов
  • проект идентификации данных, включая идентификацию
  • веб-проект, содержащий MVC

Проблема

Я создал промежуточный профиль для 2-го веб-сайта, который для меня выглядит так же, как 1-й, но миграции не обрабатываются автоматически при публикации.

Глядя на журналы сборки, когда я публикую 1-й веб-сайт, он включает в себя раздел для создания сценариев SQL Entity Framework:

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.

Я увеличил уровень ведения журнала для задачи сборки (Инструменты -> Параметры -> Проекты и решения -> Сборка и запуск -> Подробность вывода сборки проекта MSBuild) в VS2017, и я отследил это до следующей строки в решении который не вызывает задачу 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\2.1.301\Sdks\Microsoft.NET.Sdk.Publish\build\netstandard1.0\..\..\tools\net46\Microsoft.NET.Sdk.Publish.Tasks.dll".
Generating Entity framework SQL Scripts...

Похоже, проблема связана с @ (EfMigrations)? Если да, то может ли кто-нибудь пролить свет на то, откуда это взялось, и как я могу обработать миграции в рамках публикации?

Когда я смотрю на файл web.sourcemanifest.xml в папке PubTmp, появляется дополнительная строка:

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

Конечно, это могло быть чисто потому, что задача GenerateEFSQLScripts не запускалась, но я подумал, что отмечу это, если это поможет кому-то ответить на мой вопрос.

Вы нашли решение? У меня тоже такая проблема.

Fede Lerner 12.06.2019 19:37

Ваш appsettings.json находится в корне вашего запускаемого проекта? Смотрите мой ответ ниже. Моя проблема заключалась в том, что у меня были файлы настроек приложения в папке конфигурации. Мой запуск был настроен так, чтобы смотреть в папку конфигурации, и приложение работало нормально, однако экран развертывания проекта смотрел только в корень и не отображал раздел структуры сущности, так как не мог найти никаких настроенных строк подключения.

Neil 13.06.2019 21:40

Если ваши настройки приложения находятся в корне проекта, мне интересно, может ли это быть связано с неправильной конфигурацией среды, в которой вы развертываете? То есть appsettings.staging.json не имеет строк подключения или неправильно настроен.

Neil 13.06.2019 21:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
543
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Моя конкретная проблема заключалась в том, что файл appsettings.json находился в папке конфигурации, а не в корне проекта.

Инструменты работают в предположении, что appsettings.json всегда находится в корне.

Одно решение сработало, потому что изначально у меня был appsettings.json в корне, я выполнил публикацию, но позже переместил его в папку конфигурации.

Microsoft собирается добавить возможность настроить это, чтобы инструменты позволяли настраивать местоположение для appsettings.json.

Более подробную информацию об этом можно найти на Git:

Откуда берется @ (EfMigrations)?

Другие вопросы по теме