我正在使用MSBuild生成我的nuget包。
我是否需要设置任何命令,以允许它包含我的.pdb
文件,以便在调试时插入源代码?
我不希望将源文件包含在拉入nuget包的项目中。
答案 0 :(得分:24)
虽然它可能对调试没有帮助,但是包含.pdb文件非常有用,这样堆栈跟踪就会有行号。
在nuspec文件中,添加<files>
元素(<package>
的子元素,<metadata>
的兄弟元素)。这就是我在其中一个类库中的内容:
<files>
<file src="bin\$configuration$\$id$.pdb" target="lib\net452\" />
</files>
确保目标与.dll文件放在包中的文件夹相同。
答案 1 :(得分:20)
如果您使用的是VS2017 15.4或更高版本,则可以在项目文件中定义MSBuild属性
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
中讨论
答案 2 :(得分:4)
这也可以通过dotnet CLI来完成。
通过
包装<Box as="a" tag="tag" href /> // error!
// ~~~~ <-- true is not a string
我对生成的软件包进行了完整的调试
答案 3 :(得分:2)
请参阅this link。实际上,您应该在命令末尾添加 -Symbols 来创建符号包。你不应该将pdb文件添加到main nuget包中。
答案 4 :(得分:2)
使用新的csproj格式,NuGet的创建非常容易,因为MSBuild可以完成大部分工作。
要包含您的pdb
文件,只需输入标签
<IncludeSymbols>true</IncludeSymbols>
在您要打包的项目的csproj文件的属性组中。
这将创建一个附加的.symbols.nupkg
程序包,您可以将该程序包发布到(调试)供稿中。
答案 5 :(得分:0)
对我有用的方法是将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中,以便于调试。
您可能还需要考虑将“ Optimize”设置为false,以改善发行版配置中的调试体验。
答案 6 :(得分:-3)
启用符号和源服务器
设置后,ProGet将扫描NuGet包中的.pdb
文件,并将它们作为符号服务器提供给/ symbols / [FeedName] URL。有关其他信息,请参阅“符号服务器”部分。
来自:inedo.com