我正在尝试使用dotnet pack命令将项目引用的PDB文件包含在Nuget软件包中。
我找到了将项目引用的DLL文件包含到nuget包中的解决方案。这需要向.csproj文件中添加一些代码。我也尝试使其与.pdb文件一起使用,但这不起作用。
此代码仅将* .dll文件复制到nuget。
<Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
<ItemGroup>
<BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))"/>
</ItemGroup>
</Target>
这是我尝试过的方法,但是* .pdb文件在nuget中不可见。
<Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
<ItemGroup>
<BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference')->Replace('.dll', '.pdb'))"/>
</ItemGroup>
</Target>
解决方案
我已经为复制引用的PDB的解决方案提供了资金-只需将以下行添加到您的.csproj文件中即可:
<Target Name="CopyPdbToPackage" Inputs="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))" Outputs="%(ProjectReference.Identity)" AfterTargets="CopyProjectReferencesToPackage">
<PropertyGroup>
<CurrentReference>%(ProjectReference.Identity)</CurrentReference>
<CurrentReferenceName>$([System.IO.Path]::GetFileNameWithoutExtension($(CurrentReference)))</CurrentReferenceName>
</PropertyGroup>
<Message Text="Copying PDB of $(CurrentReferenceName) to packages..." Importance="high" Condition="'%(ProjectReference.NugetIgnore)'!='true'" />
<ItemGroup>
<AllItems Include="@(ReferenceCopyLocalPaths->WithMetadataValue('OriginalProjectReferenceItemSpec', '$(CurrentReference)'))" />
<PdbFiles Include="%(AllItems.Identity)" Condition="@(AllItems->EndsWith('.pdb'))=='true'" />
</ItemGroup>
<ItemGroup>
<TfmSpecificPackageFile Include="@(PdbFiles)" Condition="'%(ProjectReference.NugetIgnore)'!='true'">
<PackagePath>lib/$(TargetFramework)</PackagePath>
</TfmSpecificPackageFile>
</ItemGroup>
</Target>
但是有一个问题,“主” nuget项目的PDB没有被复制...
答案 0 :(得分:1)
下面的配置实际上是您对将DLL路径转换为PDB路径的最初想法的修复。 PDB文件未出现在生成的nuget程序包中的原因是,输出文件被进一步过滤(请参见AllowedOutputExtensionsInPackageBuildOutputFolder
)。幸运的是,我们可以自定义应保留的扩展名。
请参阅下面的最终配置。它会生成一个包,其中包含编译项目的DLL / PDB以及引用项目的DLL / PDB。
<PropertyGroup>
<!--Include Project References output-->
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
<!--Allow certain extensions-->
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
</PropertyGroup>
<Target DependsOnTargets="ResolveReferences" Name="CopyProjectReferencesToPackage">
<ItemGroup>
<!--Include DLLs of Project References-->
<BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))"/>
<!--Include PDBs of Project References-->
<BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference')->Replace('.dll', '.pdb'))"/>
</ItemGroup>
</Target>
答案 1 :(得分:0)
您可以强制命令包含符号。
--include-symbols
例如最终命令:
dotnet pack -c Debug --include-symbols
这包括软件包中的* .pdb文件。您可以阅读有关包含符号Here
的更多信息编辑:我的答案不符合问题要求。请阅读对此消息的评论。