Обновление базы данных с помощью Entity Framework из .NET Framework в конвейере Azure DevOps

После обновления Entity Framework до версии 6.4.4 migrate.exe был заменен на ef6.exe. Это привело к серьезным изменениям в моем конвейере выпуска в Azure DevOps. Я пытался обновить команду миграции из исходной рабочей

$(System.DefaultWorkingDirectory)/_IdentityServer-CI-Build/drop/migration/migrate.exe Identity Identity.Migrations.AspNetIdentity.Configuration /connectionString=$(connectionstring) /connectionProviderName="System.Data.SqlClient"

к текущей версии

$(System.DefaultWorkingDirectory)/_IdentityServer-CI-Build/drop/migration/ef6.exe database update --verbose --assembly Identity.dll --connection-provider "System.Data.SqlClient" --connection-string '$(connectionstring)'

работает на копии $(Build.SourcesDirectory)\packages\EntityFramework.6.4.4\tools\net45\any\ef6.exe.

К сожалению, я получаю сообщение об ошибке

System.Data.Entity.Tools.CommandException: Your target project 'Identity' doesn't reference EntityFramework. This package is required for the Entity Framework Core Tools to work. Ensure your target project is correct, install the package, and try again. ---> System.IO.FileNotFoundException: Could not load file or assembly 'EntityFramework' or one of its dependencies. The system cannot find the file specified.

По ошибке мне кажется, что инструмент не подходит для проектов.NET Framework. Поскольку документации по использованию этого инструмента в проектах.NET Framwork практически нет, я проверил исходный код, чтобы получить хотя бы параметры, но понятия не имею, что делать с этой ошибкой или какой другой подход использовать для ее устранения. обновление из конвейера.

2 ответа

Использование ef6.exe версии 6.4.4 выполнило миграции для:

обновление базы данных --verbose --assembly Identity.dll --migrations-config Identity.ClientConfiguration.Configuration --project-dir 'D:\drop\Identity' --connection-string '$(connectionstring)' --connection-provider "System.Data.SqlClient"

Вроде сборка не относительная --project-dir, поэтому вы должны указать полный путь к сборке.

См. этот ответ: https://github.com/dotnet/ef6/issues/1605#issuecomment-597910149 .

После этого я получил еще одну ошибку на своем локальном компьютере (но этого не произошло в Azure DevOps):

System.Reflection.TargetInvocationException: цель вызова сгенерировала исключение. ---> System.IO.FileLoadException: не удалось загрузить файл или сборку «Сервер, версия =1.0.0.0, культура = нейтральная, PublicKeyToken=null» или одну из ее зависимостей. Операция не поддерживается. (Исключение из HRESULT: 0x80131515) ---> System.NotSupportedException: была предпринята попытка загрузить сборку из сетевого расположения, что привело бы к изолированию сборки в предыдущих версиях .NET Framework. Этот выпуск .NET Framework не включает политику CAS по умолчанию, поэтому такая загрузка может быть опасной. Если эта загрузка не предназначена для песочницы сборки, включите переключатель loadFromRemoteSources. Дополнительную информацию см. на странице http://go.microsoft.com/fwlink/?LinkId=155569 .

Чтобы исправить это, мне пришлось открыть свойства файла и разблокировать файл (см. /questions/32196028/ne-udalos-zagruzit-fajl-ili-sborku-operatsiya-ne-podderzhivaetsya-isklyuchenie-iz-hresult-0x80131515/32196041#32196041):

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