Ссылка на источник с сервером символов Azure DevOps - PullRequest
0 голосов
/ 04 марта 2019

В Интернете есть несколько документированных способов использования исходных файлов Symbols и Source Link для отладки в пакете Nuget, но честно говоря, сложно понять, что для меня подходит.

У нас есть AzureСервер DevOps, на котором мы генерируем пакеты Nuget и одновременно публикуем файлы .pdb на Azure DevOps Symbol Server, используя задачу Index Sources & Publish Symbols в наших конвейерах сборки, как , описанное здесь

Мой проект 'также имеет ссылку на Microsoft.SourceLink.Vsts.Git, и этот код в файле .csproj

<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>

Я прочитал несколько постов в блоге, но источник, который, как я полагаю, наиболее актуален, имеетКонечно, официальный Source Link Git репозиторий .

В файле readme.md написано

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

Я согласен с этим, поэтому я хочу использовать Сервер символов, а не включать файл .pdb в пакет Nuget.Поэтому, пожалуйста, не отмечайте мой вопрос как дубликат этого , потому что принятый ответ - это именно то, чего я не хочу делать.

В файле readme также указано, что

Пакеты символов * .snupkg имеют некоторые ограничения :

  • В настоящее время они не поддерживают PDB Windows (сгенерированные VC ++ или для управляемых проектов, которые устанавливают свойство сборкиDebugType для полного)
  • Они требуют, чтобы библиотека создавалась более новым компилятором C # / VB (Visual Studio 2017 Update 9).
  • Потребителю пакета также необходим отладчик Visual Studio 2017 Update 9.
  • Не поддерживается службой артефактов DevOps Azure .

, поэтому, по крайней мере, я знаю, что не могу это использовать.

Но как правильно установить и работать Source Link?

Когда я отлаживаю свое тестовое консольное приложение, оно успешно загружает файл .pdb в мою папку кэша Symbols, но если я пытаюсь войти в код, полученный из пакета Nuget, используя F11, он просто неРабота.(Однако он входит в System.String.Concat, потому что мой простой тестовый пакет Nuget фактически объединяет некоторые строки)

Я попытался запустить sourcelink test TestSourceLink.pdb, но получил error: url hash does not match.Я прочитал здесь , что sourcelink test является устаревшим и не поддерживает аутентификацию в частных репозиториях, таких как наши.

В моем браузере, если я захожу на URL, указанный sourcelink print-json TestSourceLink.pdb Iможно увидеть последний исходный код.Но теперь вопрос в том, почему Visual Studio не может загрузить исходный код?Я аутентифицирован на этом сервере Azure DevOps в VS, потому что могу установить пакеты Nuget, поступающие с этого сервера.

Вот мои настройки отладки:

VS debugging settings

Большое спасибо.Я действительно не могу понять, что является недостающим фрагментом этой головоломки

1 Ответ

0 голосов
/ 04 марта 2019

Ну, я должен был прочитать и следовать этому ответу , прежде чем отправлять свой вопрос, потому что это был недостающий фрагмент головоломки.

Мне нужно было выполнить шаги 5 и 6 из В блоге Эрика , но на самом деле мне не нужно было изменять мою команду pack, потому что я не включаю файл .pdb в пакет Nuget.

[EDIT 2]:

Примечание : До сих пор я мог заставить это работать, только если пакет Nuget генерируется с Конфигурация отладочной сборки .Если вы найдете способ заставить Source Link работать с Release DLL внутри пакета Nuget, ответьте на мой другой вопрос .Спасибо

[РЕДАКТИРОВАТЬ]: Поскольку я написал документацию для своей компании, вот она:

Резюме:

Для этого требуется две вещи:

  • Имея доступ к файлу Symbol проекта (.pdb), который является файлом сопоставления, используемым отладчиком
  • Включите поддержку Source Link, чтобы Visual Studio знала, где искать исходный код, покаотладка

Настройка:

Проект компонента

Для каждого проекта в вашем решении:

  1. Толькоесли вы планируете, чтобы потребители пакета Nuget использовали Visual Studio 2017. Этот шаг не требуется, если вы хотите использовать Source Link с Visual Studio 2019 :

    В Visual Studio щелкните правой кнопкой мыши свой проект-> Properties, затем перейдите к Build -> Advanced и измените Debugging Information с Portable (значение по умолчанию) на Full

    Advanced build settings

  2. Установите Microsoft.SourceLink.Vsts.Git Nuget Package (необходимо установить флажок Include prereleaseв Visual Studio)

  3. Отредактируйте файл .csproj и включите следующий код в первый элемент PropertyGroup:

 <PublishRepositoryUrl>true</PublishRepositoryUrl>
 <EmbedUntrackedSources>true</EmbedUntrackedSources>

Построить конвейер Azure DevOps

  1. Создать переменную конвейера с именем BuildConfiguration (если она еще не существует) и установить значение Debug

    • Используйте эту переменную в качестве аргумента в своей задаче .NET Core Build: --configuration $(BuildConfiguration)
    • В своей задаче .NET Core Pack используйте эту переменную в поле Configuration to Package: $(BuildConfiguration)
  2. В конце вашего конвейера у вас должна быть задача Index Sources & Publish Symbols

    • В поле Artifact name должна использоваться также переменная BuildConfiguration: Symbols_$(BuildConfiguration)
  3. Конечно, у вас также должна быть задача .NET Core Push, чтобы отправить пакет Nuget в ваш канал Azure DevOps Nuget

Azure DevOps build pipeline

Visual Studio

  1. Tools -> Options -> Debugging -> Symbols нажмите на кнопку New Azure DevOps Symbol Server Location... и авторизуйтесь на сервере
    • Установите для папки кэша значениеудобное расположение, как C:\Symbols\.Здесь будут храниться все ваши .pdb файлы

Adding Symbol Server to Visual Studio

Tools -> Options -> Debugging -> Symbols нажмите Load only specified modules.Здесь вы можете указать файлы символов DLL, которые вы хотите загрузить.

Если вы не сделаете этого и оставите значение по умолчанию Load all modules, unless excluded, Visual Studio потребуется очень много времени, чтобы загрузить все, когда вы запуститеваша программа в режиме отладки.

Советы: Чтобы увидеть все библиотеки DLL, загруженные вашим проектом, во время отладки нажмите Debug -> Windows -> Modules.Отсюда вы можете просмотреть полный список, выбрать несколько, а затем щелкнуть правой кнопкой мыши Copy Value -> Copy Name

Load only specified modules

Tools -> Options -> Debugging -> General
  • Снять отметку Enable Just My Code
  • Чек Enable source server support
  • Чек Enable Source Link Support

Debugging Settings

Использование проекта

Если вы хотите выполнить отладку внутри кода пакета Nuget, естественно нажмите F11, чтобы войти в него, и Visual Studio спросит,вы соглашаетесь загрузить исходный код из своего хранилища Azure DevOps

consuming the project

...