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.