我正在使用MSBuild来生成我的nuget包。
我是否需要设置任何命令,允许它包含我的.pdb文件,以便在调试时进入源代码?
我不希望源文件包括在项目中,是拉在nuget包。
发布于 2018-01-22 22:19:51
如果使用的是VS2017 15.4或更高版本,则可以在项目文件中定义MSBuild属性
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>这是在NuGet #4142中讨论的。
但是,由于新的项目系统没有将pdb从包复制到.NET核心3.0+的bin/publish文件夹,因此仍然存在一个问题,sourcelink/#628也有一个很好的总结。
目前计划在.NET 7 :-(
同时,解决方法是将以下片段包含到API和测试项目中,以确保您有适当的pdbs,从而允许您进入远程源代码。
<!-- https://github.com/dotnet/sdk/issues/1458#issuecomment-1063915490 -->
<Target Name="IncludeSymbolFiles" AfterTargets="ResolveAssemblyReferences" Condition="@(ReferenceCopyLocalPaths) != ''">
<ItemGroup>
<ReferenceCopyLocalPaths Include="%(ReferenceCopyLocalPaths.RelativeDir)%(ReferenceCopyLocalPaths.Filename).pdb; %(ReferenceCopyLocalPaths.RelativeDir)%(ReferenceCopyLocalPaths.Filename).xml" />
<ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)" Condition="!Exists('%(FullPath)')" />
</ItemGroup>
</Target>发布于 2017-01-27 19:09:46
虽然它可能无助于调试,但包含.pdb文件绝对是有用的,这样堆栈跟踪就有了行号。
在nuspec文件中,包含一个<files>元素( <package>的子元素,<metadata>的同级)。这是我在类库中拥有的:
<files>
<file src="bin\$configuration$\$id$.pdb" target="lib\net452\" />
</files>确保目标与将.dll文件放在包中的文件夹相同。
发布于 2018-12-13 09:33:21
使用.csproj格式的.NET核心NuGet创建要容易得多,因为MSBuild完成了大部分工作。
为了包含您的pdb文件,只需在项目的.csproj文件中输入PropertyGroup中的标记<IncludeSymbols>true</IncludeSymbols>即可。
这将创建一个额外的.symbols.nupkg包,您可以将其发布到调试提要中。
旧的.NET框架文件可以通过开放源码库很容易地映射到新的csproj,比如https://github.com/hvanbakel/CsprojToVs2017。
https://stackoverflow.com/questions/41713693
复制相似问题