在同一解决方案中发布引用类库(项目)的 ASP.NET 项目(NET Framework 4.7.1)时,所有这些项目都在构建过程中生成了 XML 文档,仅包含 ASP.NET 项目自己的 XML 文档文件在已发布的输出中。
这些文件对于带有 Swashbuckle 的 API 文档是必需的。
这只是从 VS 发布期间的问题,而不是常规构建。我正在使用 VS Professional 2019 v16.4.2.
如何将引用的类库的 XML 文档文件包含在发布中? 这似乎是一个正常的用例,我觉得我遗漏了一些明显的东西。
我试过:
关于这个问题有各种各样的讨论。
见: https://github.com/dotnet/sdk/issues/795
以及后续问题: https://github.com/dotnet/sdk/issues/1458
但仍未修复。普遍的讨论是这些xml注释是build artifacts,发布时不支持发布。然而,当使用 swagger 并让它使用 xml 文件生成文档时,发布工件的情况就更强烈了。 (因为没有它根本行不通)
第一期提出的方案和你的方案出奇的相似
松散地基于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>
我使用的是 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>