Azure网站远程调试,git部署无法正常工作

时间:2013-11-08 21:53:06

标签: azure remote-debugging azure-web-sites azure-git-deployment

我一直在为Azure网站尝试新的远程调试功能,但我想我可能遇到过一个问题:如果我使用Web Publish,我只能让它正常工作。如果我使用本地git deploy部署站点,则调试器会附加,但不会加载调试符号(断点显示警告)。

我尝试将Release配置设置为包含PDB文件(因为Azure的git deploy默认使用Release配置),并使用azure site deploymentscript命令详细here生成的自定义部署脚本并设置build命令使用Debug配置。在这两种情况下,我仍然会遇到未加载符号的相同问题。

我觉得问题可能是以下之一:

  1. Azure在必须运行以允许远程调试的Web发布后运行某种自定义操作
  2. git部署脚本使用的构建选项缺少某种导致Web应用程序不存在PDB输出的标志(我认为这不可能)
  3. 当网站实际运行并按需编译时,Azure不尊重我在部署脚本中使用的配置
  4. 最终我希望编写一些自动部署脚本,而且我更倾向于使用git部署而不是Web Publish来实现这一目标。让我感到困惑的是,即使将Release配置设置为包含PDB文件,这也会失败。它确实让我觉得必须在Azure for Web Publish上做一些额外的工作,而不是git部署。有没有人对这可能导致差异的想法有什么看法?

    自定义Git部署脚本

    我包含azure site deploymentscript生成的自定义部署脚本以供参考,并显示它使用的构建标志。相关部分位于:: Deployment部分之后。

    @if "%SCM_TRACE_LEVEL%" NEQ "4" @echo off
    
    :: ----------------------
    :: KUDU Deployment Script
    :: Version: 0.1.5
    :: ----------------------
    
    :: Prerequisites
    :: -------------
    
    :: Verify node.js installed
    where node 2>nul >nul
    IF %ERRORLEVEL% NEQ 0 (
      echo Missing node.js executable, please install node.js, if already installed make sure it can be reached from current environment.
      goto error
    )
    
    :: Setup
    :: -----
    
    setlocal enabledelayedexpansion
    
    SET ARTIFACTS=%~dp0%..\artifacts
    
    IF NOT DEFINED DEPLOYMENT_SOURCE (
      SET DEPLOYMENT_SOURCE=%~dp0%.
    )
    
    IF NOT DEFINED DEPLOYMENT_TARGET (
      SET DEPLOYMENT_TARGET=%ARTIFACTS%\wwwroot
    )
    
    IF NOT DEFINED NEXT_MANIFEST_PATH (
      SET NEXT_MANIFEST_PATH=%ARTIFACTS%\manifest
    
      IF NOT DEFINED PREVIOUS_MANIFEST_PATH (
        SET PREVIOUS_MANIFEST_PATH=%ARTIFACTS%\manifest
      )
    )
    
    IF NOT DEFINED KUDU_SYNC_CMD (
      :: Install kudu sync
      echo Installing Kudu Sync
      call npm install kudusync -g --silent
      IF !ERRORLEVEL! NEQ 0 goto error
    
      :: Locally just running "kuduSync" would also work
      SET KUDU_SYNC_CMD=node "%appdata%\npm\node_modules\kuduSync\bin\kuduSync"
    )
    IF NOT DEFINED DEPLOYMENT_TEMP (
      SET DEPLOYMENT_TEMP=%temp%\___deployTemp%random%
      SET CLEAN_LOCAL_DEPLOYMENT_TEMP=true
    )
    
    IF DEFINED CLEAN_LOCAL_DEPLOYMENT_TEMP (
      IF EXIST "%DEPLOYMENT_TEMP%" rd /s /q "%DEPLOYMENT_TEMP%"
      mkdir "%DEPLOYMENT_TEMP%"
    )
    
    IF NOT DEFINED MSBUILD_PATH (
      SET MSBUILD_PATH=%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe
    )
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Deployment
    :: ----------
    
    echo Handling .NET Web Application deployment.
    
    :: 1. Restore NuGet packages
    IF /I "azure-test.sln" NEQ "" (
      call "%NUGET_EXE%" restore "%DEPLOYMENT_SOURCE%\azure-test.sln"
      IF !ERRORLEVEL! NEQ 0 goto error
    )
    
    :: 2. Build to the temporary path
    IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" (
      %MSBUILD_PATH% "%DEPLOYMENT_SOURCE%\azure-test\azure-test.csproj" /nologo /verbosity:m /t:Build /t:pipelinePreDeployCopyAllFilesToOneFolder     /p:_PackageTempDir="%DEPLOYMENT_TEMP%";AutoParameterizationWebConfigConnectionStrings=false;Configuration=Debug /p:SolutionDir="%DEPLOYMENT_SOURCE%\.\\"     %SCM_BUILD_ARGS%
    ) ELSE (
      %MSBUILD_PATH% "%DEPLOYMENT_SOURCE%\azure-test\azure-test.csproj" /nologo /verbosity:m /t:Build     /p:AutoParameterizationWebConfigConnectionStrings=false;Configuration=Debug /p:SolutionDir="%DEPLOYMENT_SOURCE%\.\\" %SCM_BUILD_ARGS%
    )
    
    IF !ERRORLEVEL! NEQ 0 goto error
    
    :: 3. KuduSync
    IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" (
      call %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
    )
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    :: Post deployment stub
    call %POST_DEPLOYMENT_ACTION%
    IF !ERRORLEVEL! NEQ 0 goto error
    
    goto end
    
    :error
    echo An error has occurred during web site deployment.
    call :exitSetErrorLevel
    call :exitFromFunction 2>nul
    
    :exitSetErrorLevel
    exit /b 1
    
    :exitFromFunction
    ()
    
    :end
    echo Finished successfully.
    

2 个答案:

答案 0 :(得分:27)

2014年2月8日更新

在WAWS中进行了一些修复,现在可以通过让VS正确加载服务器端PDB来使用git时进行调试。要使它工作,你需要做两件事之一(即你不需要同时做两件事)。它可以在VS 2012和2013中使用。

  1. 关闭“我的代码调试”:只需在VS调试器设置中关闭该设置,然后尝试调试Azure网站。
  2. 在调试模式下构建:要在服务器构建上执行此操作,您可以转到Azure门户并添加名为SCM_BUILD_ARGS的ApSetting,其值为-p:Configuration=Debug(更多详情here)。然后转到Deployments页面并单击Redeploy按钮(对于当前部署)。然后从VS附加,它应该都可以工作!
  3. 原始答案

    事实上,这在今天不起作用,我们正试图看看我们如何才能使它发挥作用。从根本看,问题似乎是Visual Studio调试器希望在客户端上找到PDB,而在git情况下,它们只存在于服务器上。

    这个article讨论了调​​试器在2010和更新版本之间如何工作的变化,这可能会影响事情。

    需要进行更多调查,但这是现在的状况。

答案 1 :(得分:0)

.Net Core Azure Function项目在使用Cloud Explorer右键单击功能进行附加时遇到了这个问题。以下github问题可以说明问题,但是解决方案无法解决我的问题:

https://github.com/Azure/Azure-Functions/issues/872

我终于在这里偶然发现了答案:

http://dontcodetired.com/blog/post/Remote-Debugging-Azure-Functions-V2-The-breakpoint-will-not-currently-be-hit-No-symbols-have-been-loaded-for-this-document

它归结为在Azure中手动附加到流程,而不是依靠Cloud Explorer的右键单击功能。