将pdb文件包含到我的nuget(nupkg)文件中

时间:2017-01-18 07:35:31

标签: c# visual-studio msbuild nuget

我正在使用MSBuild生成我的nuget包。

我是否需要设置任何命令,以允许它包含我的.pdb文件,以便在调试时插入源代码?

我不希望将源文件包含在拉入nuget包的项目中。

7 个答案:

答案 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>

这在NuGet #4142

中讨论

答案 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