因此,我有一个计划上传到Azure网站的Web应用,并且我具有使用NH的Project.Model.csproj和使用FluentMigrator的Project.Model.Migrations.csproj。
当尝试使用Kudu运行部署时,我发现我的Migrations.csproj没有得到编译,因为它不是web.csproj引用树的一部分(我猜这是正确的选择)。 / p>
因此,我立即尝试修改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。
答案 0 :(得分:1)
我同意,将模型与迁移分开是有意义的。但是,您还应该分离部署。。在这种情况下,我将拥有两个构建(1个用于Web应用程序,1个用于迁移),它将两个(构建)工件推到放置位置。然后,我将有两个版本定义,第一个版本定义将针对您的sql连接字符串运行流利的migrator程序集以更新数据库。第二个将更新Web应用。
在这种情况下,我喜欢使用Visual Studio Team Services(VSTS)。