Включить файлы pdb в мои файлы nuget (nupkg)
Я использую MSBuild для создания своих пакетов nuget.
Есть ли какая-либо команда, которую мне нужно установить, чтобы она могла включать мои .pdb
файлы, для входа в исходный код при отладке?
Я не хочу, чтобы исходные файлы были включены в проект, который загружается в пакет nuget.
9 ответов
Хотя это может не помочь при отладке, определенно полезно включить файлы.pdb, чтобы трассировки стека имели номера строк.
В файле nuspec включите <files>
элемент (потомок <package>
, родной брат <metadata>
). Это то, что у меня есть в одной из моих библиотек классов:
<files>
<file src="bin\$configuration$\$id$.pdb" target="lib\net452\" />
</files>
Убедитесь, что цель - это та же папка, в которой находится ваш DLL-файл.
Если вы используете VS2017 15.4 или новее, вы можете определить свойство MSBuild в вашем файле проекта
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
Это обсуждается в NuGet #4142
С новым форматом csproj создание NuGet можно сделать проще с MSBuild. Для того, чтобы включить ваш pdb
файлы, которые вы просто должны ввести тег <IncludeSymbols>true</IncludeSymbols>
в группе свойств. Это создаст дополнительный .symbols.nupkg
пакет, который вы можете выпустить в свой канал.
Это также можно сделать с помощью интерфейса командной строки dotnet.
Путем упаковки с
dotnet pack --include-symbols --include-source [path-to-project-here]
Я получаю полную отладку сгенерированных мной пакетов
В 2023 году правильный способ сделать это — использовать SymbolLink.
Включите следующий пакет NuGet, и он установит все необходимые свойства. https://github.com/dotnet/reproducible-builds
Я использовал его в своей DLL, и люди могут его отладить. https://github.com/xavierjohn/FunctionalDDD
Подход, который сработал для меня, заключался в добавлении PDB в качестве контента, который имел преимущество, он будет скопирован вместе с DLL. (Требуется PackageCopyToOutput)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<EmbedAllSources>true</EmbedAllSources>
</PropertyGroup>
<ItemGroup>
<Content Include="bin\$(Configuration)\$(AssemblyName).pdb" PackagePath="contentFiles\any\netstandard2.0\$(AssemblyName).pdb">
<PackageCopyToOutput>true</PackageCopyToOutput>
</Content>
</ItemGroup>
</Project>
EmbedAllSources - будет включать исходный код в PDB для упрощения отладки.
Вы также можете рассмотреть возможность установки для параметра "Оптимизировать" значения false для улучшения процесса отладки в конфигурации выпуска.
Более новый подход заключается в использовании следующих свойств .csproj:
<DebugType>embedded</DebugType>
<EmbedAllSources>true</EmbedAllSources>
EmbedAllSources — будет включать исходный код в PDB для упрощения отладки.
Установка для DebugType значения «встроенный» приведет к внедрению PDB в .DLL.
Таким образом, используя оба варианта вместе, исходный код будет встроен в DLL.
Обратитесь к этой ссылке. На самом деле вы должны добавить -Symbols в конец команды, чтобы создать пакет символов. Вы не должны добавлять файлы pdb в основной пакет nuget.
Включить Symbol и Source Server
Когда установлено, ProGet будет сканировать пакеты NuGet для .pdb
файлы и сделать их доступными в качестве сервера символов по URL-адресу /symbols/[FeedName]. См. Раздел "Сервер символов" для получения дополнительной информации.
От: inedo.com