如何将Nuget包中的XML文档包含在csproj生成输出中

9

我有一个包含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文档已经在包中了,没有必要再创建更多副本。 - Vlad DX
2
该项目曾引用另一个项目,但现在已成为NuGet包。XML文档用于自动生成API页面。 - Tim
2个回答

10

在此发布Vlad的答案

如果您想从所有软件包中复制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>

1
这似乎有效!你能否尝试解释一下它是如何工作的? :-) - osexpert
@osexpert,老实说我不知道呢,哈哈。我在msbuild方面是个彻头彻尾的新手。我只是复制了Vlad的答案到这里,因为我测试过它似乎很好用。如果你在另一个答案中@他,或许他可以添加解释? - geekley
基本上,它是将所有已安装的NuGet包中的XML文件复制到构建目录中。当您安装NuGet包时,它将存储在“C:\ Users \ your_login_name \ .nuget \ packages”中。 - AlbertK

2

1
我在这里发布了解决方案:https://dev59.com/r1cP5IYBdhLWcg3wRYBh#64006774 - Vlad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接