我正在尝试将 ASP.NET Web 应用程序部署到 Azure。它是混合的 Web 窗体、MVC 和 WebAPI,并且有大量的 aspx/ascx 文件,因此它们确实需要进行预编译,否则每次部署都会使网站运行一段时间缓慢。
我正在尝试通过 kudu 通过 SCM 与 GitHub 集成进行部署,并带有预编译的视图,所有这些都合并到一个程序集中。
注意:
- Deploy 在禁用预编译的情况下工作正常。
- 从 Visual Studio 部署工作正常
- 如果我从 Azure 日志中复制 msbuild 命令、替换相关路径并在我的 Windows 8.1 机器上本地运行,则构建工作正常。
我已将高级预编译设置设置为:
- 不允许预编译的站点可更新
- 不发出调试信息
- 将所有页面和控制输出合并到一个程序集 = AppViews.dll
这是 Azure 的.deployment文件
[config]
project = WebSite/WebSite.csproj
SCM_BUILD_ARGS=/p:Configuration=Release;PublishProfile=azure-prod /v:n
您注意到我将详细信息发送/v
到“正常”以获取额外的诊断信息。
这是我在部署日志尾部获得的信息:
AspNetPreCompile:
D:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v \ -p D:\home\site\repository\WebSite\obj\Release\AspnetCompileMerge\Source -c D:\home\site\repository\WebSite\obj\Release\AspnetCompileMerge\TempBuildDir
GenerateAssemblyInfoFromExistingAssembleInfo:
Creating directory "obj\Release\AssemblyInfo".
D:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /out:obj\Release\AssemblyInfo\AssemblyInfo.dll /target:library Properties\AssemblyInfo.cs
AspNetMerge:
Running aspnet_merge.exe.
D:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\aspnet_merge.exe D:\home\site\repository\WebSite\obj\Release\AspnetCompileMerge\TempBuildDir -w AppViews.dll -copyattrs obj\Release\AssemblyInfo\AssemblyInfo.dll -a
aspnet_merge : error 1003: The directory 'D:\home\site\repository\WebSite\obj\Release\AspnetCompileMerge\TempBuildDir' does not exist. [D:\home\site\repository\WebSite\WebSite.csproj]
Done Building Project "D:\home\site\repository\WebSite\WebSite.csproj" (Build;pipelinePreDeployCopyAllFilesToOneFolder target(s)) -- FAILED.
Build FAILED.
它看起来像 aspnet_compiler.exe 运行,但没有做它应该做的,这就是为什么 TempBuildDir 目录(应该是编译器的输出)对于 AspNetMerge 目标没有及时存在。与我的系统相比,该目录确实存在,包含标记 aspx/ascx/etc。文件、静态内容、PrecompiledApp.config 文件以及 bin 目录中的一大堆东西。
aspnet_compiler.exe 有一个-errorstack
标志,但我不清楚如何让 MSBuild 仅通过.deployment
文件添加它,或者即使该应用程序真的抛出错误。
我可以通过 Visual Studio 进行部署,但我真的很想利用 SCM 集成,所以我可以推送到我的 prod 分支并放手。有什么建议么?