首页 > 解决方案 > 在哪里可以找到 FluentMigrator 类?

问题描述

所以我有我计划上传到 Azure 网站的 web 应用程序,我有我的 Project.Model.csproj 使用 NH 和我的 Project.Model.Migrations.csproj 使用 FluentMigrator。

当尝试使用 Kudu 运行部署时,我发现我的 Migrations.csproj 没有被编译,因为它不是 web.csproj 的引用树的一部分(我猜这是正确的做法)。

因此,我立即尝试修改我的 deploy.cmd,以便为该 Migrations.csproj 启动 msbuild。但是,我发现它可能会导致其他问题,尤其是 KuduSync,因为我在通常的 kudu 逻辑的“主流”之外进行编译。

我的问题是:拥有 Model.csproj 和 Migrations.csproj 是否正确?基于维护和秩序是合乎逻辑的,但它属于这类问题。

如果可以分开,那么如何更改 kudu 脚本以在大多数情况下正常工作?

这是脚本(为简洁而缩短)。

:: 2. Build to the temporary path
IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" (
  call :ExecuteCmd "%MSBUILD_PATH%" "%DEPLOYMENT_SOURCE%\Code\web.csproj" /nologo /verbosity:m /t:Build /t:pipelinePreDeployCopyAllFilesToOneFolder /p:_PackageTempDir="%DEPLOYMENT_TEMP%"; ...
) ELSE (
  call :ExecuteCmd "%MSBUILD_PATH%" "%DEPLOYMENT_SOURCE%\Code\web.csproj" /nologo /verbosity:m /t:Build /p:...
)
IF !ERRORLEVEL! NEQ 0 goto error

:: 2.1 Build the migration project because they are not in the official dependencies of the web application
call :ExecuteCmd "%MSBUILD_PATH%" "%DEPLOYMENT_SOURCE%\Code\mig.csproj" /nologo /verbosity:m /t:Build /p:Configuration=Release
IF !ERRORLEVEL! NEQ 0 goto error

:: 3. KuduSync
IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" (
  call :ExecuteCmd "%KUDU_SYNC_CMD%" -v 50 -f "%DEPLOYMENT_TEMP%" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd"
  IF !ERRORLEVEL! NEQ 0 goto error
)

2.1 是我为编译 mig.csproj 添加的步骤,但是,我(尚未对其进行测试)假设 3 不会按预期工作,因为它会错过我在 2.1 步骤中生成的 dll。

标签: c#azureazure-web-app-servicekudufluent-migrator

解决方案


我同意,将模型与迁移分开是有道理的。但是你也应该分开部署。在您的情况下,我将有两个构建(1 个用于 Web 应用程序,1 个用于迁移),它们会将两个(构建)工件推送到放置位置。然后我将有两个发布定义,第一个将针对您的 sql 连接字符串运行 fluent 迁移器程序集以更新数据库。第二个将更新网络应用程序。

我喜欢在这种情况下使用Visual Studio Team Services (VSTS)。


推荐阅读