Удаленная отладка веб-сайта Azure с помощью git deploy не работает

Я пробовал новую функцию удаленной отладки для веб-сайтов Azure, но думаю, что, возможно, я столкнулся с проблемой: я могу заставить ее работать правильно только при использовании веб-публикации. Если я развертываю сайт с локальным git deploy, отладчик присоединяется, но символы отладки не загружаются (точки останова показывают предупреждение).

Я попытался как настроить конфигурацию выпуска для включения файлов PDB (поскольку git deploy Azure использует конфигурацию выпуска по умолчанию), так и с помощью специального сценария развертывания, созданного командой azure site deploymentscript Команда подробно описана здесь и настройка команды build для использования конфигурации Debug. В обоих случаях у меня все та же проблема, что символы не загружены.

Я чувствую, что проблема, вероятно, одна из следующих:

  1. Azure выполняет какое-то настраиваемое действие после веб-публикации, которое необходимо запустить, чтобы разрешить удаленную отладку.
  2. В опциях сборки, используемых сценариями развертывания git, отсутствует какой-либо флаг, из-за которого выходные данные PDB не отображаются в веб-приложении (я не думаю, что это вероятно)
  3. Azure не учитывает конфигурацию, которую я использую в сценарии развертывания, когда сайт фактически запущен и скомпилирован по требованию.

В конечном итоге я надеюсь написать несколько сценариев автоматического развертывания, и для этого я бы предпочел использовать git-развертывание, а не веб-публикацию. Что меня действительно сбивает с толку, так это то, что это не удается даже при установленной конфигурации выпуска, включающей файлы PDB. Это действительно заставляет меня думать, что в Azure для веб-публикации должно быть что-то еще, что не делается для развертывания 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.

1 ответ

Решение

Обновление 08.02.2014

Некоторые исправления были сделаны в WAWS, и теперь можно использовать отладку при использовании git, если VS правильно загружает серверные PDB. Чтобы это работало, вам нужно сделать одну из двух вещей (т.е. вам не нужно делать оба). Может работать как в VS 2012, так и в 2013 году.

  1. Отключите отладку Just My Code: просто отключите этот параметр в настройках отладчика VS и попробуйте отладить свой веб-сайт Azure.
  2. Сборка в режиме отладки: чтобы сделать это при сборке сервера, вы можете перейти на портал Azure и добавить ApSetting под названием SCM_BUILD_ARGSсо значением -p:Configuration=Debug (подробнее здесь). Затем перейдите на страницу Deployments и нажмите кнопку Redeploy (для текущего развертывания). Тогда присоединяйся от VS и все должно работать!

Оригинальный ответ

Действительно, сегодня это не работает, и мы пытаемся понять, как мы могли бы заставить это работать. В корне проблема заключается в том, что отладчик Visual Studio ожидает найти PDB на клиенте, тогда как в git-случае они существуют только на сервере.

В этой статье рассматриваются изменения в том, как отладчик работает между 2010 и более новыми версиями, и это, вероятно, влияет на вещи.

Требуется дополнительное расследование, но сейчас так обстоят дела.

У меня была эта проблема с проектом.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, вызываемой правой кнопкой мыши.

Другие вопросы по тегам