在发布期间未复制引用的程序集的 xml 文档

问题描述 投票:0回答:3

在同一解决方案中发布引用类库(项目)的 ASP.NET 项目(NET Framework 4.7.1)时,所有这些项目都在构建过程中生成了 XML 文档,仅包含 ASP.NET 项目自己的 XML 文档文件在已发布的输出中。

这些文件对于带有 Swashbuckle 的 API 文档是必需的。

这只是从 VS 发布期间的问题,而不是常规构建。我正在使用 VS Professional 2019 v16.4.2.

如何将引用的类库的 XML 文档文件包含在发布中? 这似乎是一个正常的用例,我觉得我遗漏了一些明显的东西。

我试过:

  • 在所述项目中包含 XML 文件并将它们标记为“内容”和“始终复制”到输出目录。没有变化。
  • 更改不同的发布设置,似乎都对此没有任何影响
asp.net publish visual-studio-2019 swashbuckle
3个回答
3
投票

关于这个问题有各种各样的讨论。

见: https://github.com/dotnet/sdk/issues/795

以及后续问题: https://github.com/dotnet/sdk/issues/1458

但仍未修复。普遍的讨论是这些xml注释是build artifacts,发布时不支持发布。然而,当使用 swagger 并让它使用 xml 文件生成文档时,发布工件的情况就更强烈了。 (因为没有它根本行不通)

第一期提出的方案和你的方案出奇的相似


2
投票

松散地基于Sam Stephens 博客文章 我已将其添加到项目文件中,该文件在发布期间将所有 xml 文件复制到 bin 文件夹。如果有人提出更简单的方法,请不要犹豫发布答案 :)

<PropertyGroup>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
    CopyXmlDocuments;
  </CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
<Target Name="CopyXmlDocuments">
  <ItemGroup>
    <XmlDocuments Include="$(OutDir)*.xml" />
    <FilesForPackagingFromProject Include="%(XmlDocuments.Identity)">
      <DestinationRelativePath>bin\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
</Target>

0
投票

我使用的是 Visual Studio 2022,我必须在项目文件的末尾包含以下代码:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <!-- more configuration here ... -->

  <PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
      CopyXmlDocuments;
      $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>
    <CopyAllFilesToSingleFolderForMsdeployDependsOn>
      CopyXmlDocuments;
      $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
    </CopyAllFilesToSingleFolderForMsdeployDependsOn>
  </PropertyGroup>
  <Target Name="CopyXmlDocuments">
    <ItemGroup>
      <XmlDocuments Include="$(OutDir)*.xml" />
      <FilesForPackagingFromProject Include="%(XmlDocuments.Identity)">
        <DestinationRelativePath>bin\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>
</Project>
© www.soinside.com 2019 - 2024. All rights reserved.