首页 > 解决方案 > 如何将 XML 文件从 NuGet 包发布到 ASP.NET Core 2.1 应用程序

问题描述

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

我想在 Swagger 中使用 XML 文档,所以我SwaggerGenOptions在 Startup.cs 中添加了以下内容:

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

到现在为止还挺好。当我从 Visual Studio 2017 运行应用程序时,它成功地在 NuGet 包缓存中找到 XML 文档文件并生成 Swagger 文档。

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

我尝试将这篇博文中的咒语添加到MyWebApiApp.csproj,但没有成功。

标签: asp.net-corenuget-packageasp.net-core-2.1swashbuckle.aspnetcore

解决方案


我在这里找到了解决方案。

需要将以下咒语添加到 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>

推荐阅读