0

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 文档。

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

  • 应用程序 ( ) 的 XML 文档文件MyWebApiApp.xml被复制到发布文件夹(我已包含<GenerateDocumentationFile>true</GenerateDocumentationFile>在 中MyWebApiApp.csproj)。
  • 但是我的 NuGet 包 ( ) 中的 XML 文档文件MyPackage.xml没有被复制。

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

4

1 回答 1

0

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

需要将以下咒语添加到 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>
于 2020-03-03T06:53:54.147 回答