Никаких символов при подключении к программе .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>
...
Надеюсь, это поможет кому-то в будущем.