Никаких символов при подключении к программе .NET Core (один файл)

Чтобы лучше объяснить, я дам некоторый контекст.

У меня есть приложение, которое динамически загружает библиотеку во время выполнения. Библиотека представляет собой своего рода плагин, и приложение предназначено для тестирования плагина.

Чтобы иметь возможность отлаживать плагин, я открываю VS Code с проектом плагина и подключаю отладчик к приложению, которое уже запущено и уже загрузило плагин. Сборка плагина собрана и содержит хороший PDB-файл.

Итак, рабочий процесс следующий: Application => load plugin => attach debugger

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

Однако есть сценарий, при котором я не могу правильно прикрепить или символы не загружены. И это если я опубликую приложение с /p:PublishSingleFile=trueфлаг. В этом сценарии создается один файл, и когда я пытаюсь подключить отладчик, он просто не работает.

Может ли кто-нибудь дать какое-либо представление об этом? Или возможное решение?

Стоит сказать, что я использую.NET 5

Ура

1 ответ

Решение

Отвечая на свой вопрос.

Из.NET Core 3.0 с использованием флага /p:PublishSingleFile=true по умолчанию предполагает --self-contained true. И это имеет смысл, если вы упаковываете все в один файл, вам, вероятно, также понадобится среда выполнения.NET.

Дело с --self-contained заключается в том, что он обрезает сборки для уменьшения размера.

Модель обрезки автономного развертывания - это специализированная версия модели автономного развертывания, оптимизированная для уменьшения размера развертывания.

И при этом есть некоторые риски, которые могут привести к неправильному поведению среды выполнения, когда дело доходит до использования отражения (например, динамической загрузки сборок).

Однако существует риск того, что анализ времени сборки приложения может вызвать сбои во время выполнения из-за невозможности надежно проанализировать различные проблемные шаблоны кода (в основном сосредоточенные на использовании отражения).

Вы можете прочитать здесь.

Отключение --self-containedрешает проблему, и мне удалось подключить отладчик к однофайловому приложению. Я сделал это, добавив <SelfContained>false</SelfContained> в файл проекта.

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <SelfContained>false</SelfContained>
    <PublishSingleFile>true</PublishSingleFile>
  </PropertyGroup>
...

Надеюсь, это поможет кому-то в будущем.

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