Pdb-bestanden opnemen in mijn nuget-bestanden (nupkg)

Ik gebruik MSBuild om mijn nugetpakketten te genereren.

Is er een commando dat ik moet instellen, zodat het mijn .pdb-bestanden kan opnemen, om in de broncode te stappen tijdens het debuggen?

Ik wil niet dat de bronbestanden worden opgenomen in het project dat het nuget-pakket binnenhaalt.


Antwoord 1, autoriteit 100%

Als u VS2017 15.4 of later gebruikt, kunt u een MSBuild-eigenschap in uw projectbestand definiƫren

<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>

Dit wordt besproken in NuGet #4142

Er is echter nog steeds een probleem omdat het nieuwe projectsysteem de pdbs van pakketten niet kopieert naar de map bin/publish voor .NET Core 3.0+, een goede samenvatting is ook te vinden op sourcelink /#628

Momenteel is dit niet gepland om te worden opgelost tot .NET 6šŸ™


Antwoord 2, autoriteit 76%

Hoewel het misschien niet helpt bij het opsporen van fouten, is het zeker handig om .pdb-bestanden op te nemen, zodat stacktraces regelnummers hebben.

Neem in het nuspec-bestand een <files>-element op (onderliggend element van <package>, broer of zus van <metadata>). Dit is wat ik heb in een van mijn klasbibliotheken:

<files>
    <file src="bin\$configuration$\$id$.pdb" target="lib\net452\" />
</files>

Zorg ervoor dat het doel dezelfde map is als waar uw .dll-bestand in het pakket is geplaatst.


Antwoord 3, autoriteit 51%

Met het nieuwe csproj-formaat is het maken van NuGet een stuk eenvoudiger, aangezien MSBuild het meeste werk doet.

Om uw pdb-bestanden op te nemen, hoeft u alleen maar de tag in te voeren

<IncludeSymbols>true</IncludeSymbols>

in een eigenschappengroep in het csproj-bestand van het project dat u inpakt.
Hiermee wordt een extra .symbols.nupkg-pakket gemaakt, dat u kunt vrijgeven in uw (foutopsporings)feed.


Antwoord 4, autoriteit 16%

Dit kan ook worden bereikt met de dotnet CLI.

Door te verpakken met

dotnet pack --include-symbols --include-source [path-to-project-here]

Ik krijg volledige foutopsporing voor de pakketten die ik heb gegenereerd


Antwoord 5, autoriteit 6%

De aanpak die voor mij werkte, was het toevoegen van de PDB als inhoud, wat het voordeel had dat het naast de DLL zou worden gekopieerd. (PackageCopyToOutput was vereist)

<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 – Zal de broncode in de PDB opnemen voor eenvoudiger debuggen.

U kunt ook overwegen om ‘Optimaliseren’ in te stellen op ‘false’ om de foutopsporing in de releaseconfiguratie te verbeteren.


Antwoord 6, autoriteit 4%

Raadpleeg deze link. Eigenlijk zou je -Symbolsaan het einde van het commando moeten toevoegen om een symbolenpakket te maken. Je moet geen pdb-bestanden toevoegen aan het hoofdnugetpakket.

Other episodes