【问题标题】:How to include XML Documentation from Nuget Package in csproj build output如何在 csproj 构建输出中包含来自 Nuget 包的 XML 文档
【发布时间】:2019-12-16 03:22:57
【问题描述】:

我有一个包含 XML 文档文件的 nuget 包。

packages/MyPackage.1.0.0/lib/net472/MyPackage.xml

但是,当我构建我的项目时,我想在输出中包含这个 xml 文件。

所以当我:

dotnet MyProj.csproj -c Release

我想得到:

> ls bin/Release/net472
MyProj.dll
MyPackage.dll
MyPackage.xml

但是它永远不会出现。我怎样才能得到它?

【问题讨论】:

  • 您为什么希望依赖包中的 XML 文档出现在项目的构建输出中? XML 文档位于包中,无需创建更多副本。
  • 该项目用于引用另一个后来成为 nuget 包的项目。 XML 文档用于自动生成的 API 页面。

标签: msbuild nuget nuget-package csproj packagereference


【解决方案1】:

在这里发帖Vlad's answer

如果您想从所有包中复制 xml,这比 Snede 的方法更好,因为它可以通用,无需在每个包的路径上指定 .net 版本。

<Project>
  <!-- ... -->
  <ItemGroup>
    <PackageReference Include="Example.SomePkg" Version="1.0.0" />
  </ItemGroup>
  <!-- ... -->
  <Import Project="$(MSBuildToolsPath)/Microsoft.CSharp.targets" />

  <!-- Add this -->
  <Target Name="_ResolveCopyLocalNuGetPkgXmls" AfterTargets="ResolveReferences">
    <ItemGroup><!-- Copy XML files from all PackageReferences to output dir -->
      <ReferenceCopyLocalPaths Include="@(ReferenceCopyLocalPaths->'%(RootDir)%(Directory)%(Filename).xml')"
      Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)'!='' and Exists('%(RootDir)%(Directory)%(Filename).xml')" />
    </ItemGroup>
  </Target>

</Project>

【讨论】:

  • 这似乎有效!你能试着解释一下它是如何工作的吗? :-)
  • @osexpert 老实说我不知道​​哈哈。我在 msbuild 中完全是菜鸟。我只是在这里复制了弗拉德的答案,因为我对其进行了测试,并且它似乎运行良好。如果您在另一个答案中@他,也许他可以添加解释?
  • 基本上,它是将所有 xml 文件从已安装的 nuget 包复制到构建目录。当您安装 nuget 包时,它将存储在“C:\Users\your_login_name\.nuget\packages”中
【解决方案2】:

我找到了一种解决方案: 请在https://snede.net/add-nuget-package-xml-documentation-to-swagger/?unapproved=168&moderation-hash=14dbe7e7ca3d8affb6ace2bfdb7ff581找到它

这实际上是从nuget包复制文件到out dir或publish dir的问题。

在运行构建或发布后,只需修改 csproj 文件以从包的路径复制文件。

【讨论】:

猜你喜欢
  • 2020-03-11
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多