Kam*_*zak 4 .net c# package pdb-files nuget
我正在尝试使用 dotnet pack 命令将项目引用的 PDB 文件包含到 Nuget 包中。
我找到了将项目引用的 DLL 文件包含到 nuget 包中的解决方案。这需要向 .csproj 文件添加一些代码。我还尝试让它与 .pdb 文件一起使用,但这不起作用。
此代码仅将 *.dll 文件复制到 nuget。
<Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
<ItemGroup>
<BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))"/>
</ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的,但 *.pdb 文件在 nuget 中不可见。
<Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
<ItemGroup>
<BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference')->Replace('.dll', '.pdb'))"/>
</ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)
解决方案
我已经提供了复制引用 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>
Run Code Online (Sandbox Code Playgroud)
但有一个问题,“主”nuget 项目的 PDB 没有被复制......
下面的配置实际上是对将 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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3282 次 |
| 最近记录: |