如何将 XML 文件从 NuGet 包发布到 ASP.NET Core 2.1 应用程序

How to publish XML files from a NuGet package to an ASP.NET Core 2.1 application

我有一个 ASP.NET Core 2.1 应用程序(例如,MyWebApiApp),它引用了一个 NuGet 包(例如,MyPackage),其中包含 Web [=42] 中使用的模型=].这些模型使用 XML 注释记录,生成的 XML 文件与 NuGet 包一起发布(在 lib\netstandard2.0\MyPackage.xml 中)。

我想在 Swagger 中使用 XML 文档,因此我将以下内容添加到 Startup.cs 中的 SwaggerGenOptions

c.IncludeXmlComments(Path.ChangeExtension(typeof(MyPackage.MyModel).Assembly.Location, ".xml"));

到目前为止,还不错。当我 运行 来自 Visual Studio 2017 的应用程序时,它成功地在 NuGet 包缓存中找到 XML 文档文件并生成 Swagger 文档。

现在我想发布网站。当我发布网站时:

我尝试将 this blog post 的咒语添加到 MyWebApiApp.csproj,但没有成功。

我找到了解决方案 here

需要将以下内容添加到 pubxml 文件中:

<Target Name="_ResolvePublishNuGetPackagePdbsAndXml"
      AfterTargets="RunResolvePublishAssemblies">
  <ItemGroup>
    <ResolvedFileToPublish
      Include="@(ResolvedAssembliesToPublish->'%(RootDir)%(Directory)%(Filename).pdb')"
      RelativePath="$([System.IO.Path]::ChangeExtension(%(ResolvedAssembliesToPublish.DestinationSubPath), '.pdb'))"
      DestinationSubPath="$([System.IO.Path]::ChangeExtension(%(ResolvedAssembliesToPublish.DestinationSubPath), '.pdb'))"
      Condition="'%(ResolvedAssembliesToPublish.PackageName)' != ''
                  and Exists('%(RootDir)%(Directory)%(Filename).pdb')" />
    <ResolvedFileToPublish
      Include="@(ResolvedAssembliesToPublish->'%(RootDir)%(Directory)%(Filename).xml')"
      RelativePath="$([System.IO.Path]::ChangeExtension(%(ResolvedAssembliesToPublish.DestinationSubPath), '.xml'))"
      DestinationSubPath="$([System.IO.Path]::ChangeExtension(%(ResolvedAssembliesToPublish.DestinationSubPath), '.xml'))"
      Condition="'%(ResolvedAssembliesToPublish.PackageName)' != ''
                  and Exists('%(RootDir)%(Directory)%(Filename).xml')" />
  </ItemGroup>
</Target>