【发布时间】:2014-12-18 19:47:12
【问题描述】:
我正在尝试将 ASP.NET Web 应用程序部署到 Azure。它是 Web 表单、MVC 和 WebAPI 的混合体,并且有大量的 aspx/ascx 文件,因此它们确实需要进行预编译,否则每次部署都会使网站延迟一段时间。
我正在尝试通过 kudu 与 GitHub 的 SCM 集成进行部署,使用预编译的视图,全部合并到一个程序集中。
注意:
- 在禁用预编译的情况下,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 分支并放手。有什么建议吗?
【问题讨论】:
-
aspnet_compiler 被 Azure 网站上的 stub exe 替换。您可能想在此处提交问题 - github.com/projectkudu/kudu - 以便部署团队跟踪它并找出解决方案。
-
@Pranav 你有任何文件证明它是一个存根 exe 吗?我从 Kudu 服务 URL (sitename.scm.azurewebsites.net) 下载了 exe,并使用 dotTrace 检查,看起来基本相同。我什至尝试将我的本地副本添加到我的存储库并使用自定义 MSBuild 目标来更改使用我自己的路径,但无济于事。
标签: asp.net azure msbuild azure-web-app-service kudu