因此,我计划将web应用程序上载到azure网站,使用nh的project.model.csproj和使用fluentmigrator的project.model.migrations.csproj。
当尝试使用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。
1条答案
按热度按时间n6lpvg4x1#
我同意,将模型与迁移分离是有意义的。但您也应该将部署分开。在您的情况下,我将有两个构建(一个用于web应用,一个用于迁移),这将把两个(构建)构件推送到放置位置。然后我将有两个版本定义,第一个版本定义将针对您的sql连接字符串运行fluent migrator程序集来更新db。第二个将更新web应用程序。
我喜欢使用visualstudioteamservices(vsts)来实现这些场景。