获取 Docker 容器中依赖包的 XML 文档

Hen*_*Kok 1 xml-documentation docker swagger-ui asp.net-core-2.0

我们有一个 Asp.Net Core 2.0 Web 服务,我们将其部署在 Docker 容器中。

对于 Web 服务,我们生成一个 xml 文档文件,并在 Swagger-ui 中使用该文件。这适用于从项目本身生成的 xml 文档,但是当 Web 服务部署在 Docker 容器中时,我无法获得为可见的包含包生成的 xml 注释。

nuget 包(也由我们创建)确实包含一个 xml 文档文件,我们可以让 swagger 在本地机器上运行服务时使用它。通过调用 .IncludeXmlComments 使文档可用于 swagger,并且文档的路径是通过获取程序集的路径然后用 .xml 替换 .dll 扩展名来确定的。

我怀疑该包的xml doc文件未包含在容器中,因此无法找到。在 Dockerfile 我看到命令

COPY publish .
Run Code Online (Sandbox Code Playgroud)

我想要一个还添加/复制包的 xml doc 文件的命令,或者知道如何使 xml doc 文件成为发布资产的一部分。任何其他能够以稳健的方式(不仅仅是在我的机器上)进行这项工作的解决方案也是受欢迎的。

编辑:我们现在在 Docker 容器中有额外的 xml doc 文件,但 Swagger 仍然没有显示该文件中提供的描述(它在本地运行时会显示)。我们使用了类似的东西:

<Target Name="PrepublishScript" BeforeTargets="PrepareForPublish">  
    <ItemGroup>
        <DocFile Include="$(USERPROFILE)\.nuget\packages\{packagename}\**\lib\$(TargetFramework)\{PackageName}.xml" />
    </ItemGroup>
    <Copy SourceFiles="@(DocFile)" DestinationFolder="$(PublishDir)" SkipUnchangedFiles="false" />
</Target>
Run Code Online (Sandbox Code Playgroud)

其中 {PackageName} 应替换为您的包的实际名称。路径中的通配符使其版本独立(尽管我们现在必须检查这是否会导致问题,因为我们有多个版本)。

小智 7

确保您已选中项目属性-> 构建-> XML 文档文件下的发布配置的XML 文档复选框。您可能已经检查了调试配置,但没有检查发布配置。从项目属性下的下拉列表中选择发布并选中 XML 文档文件复选框。您的 docker RUN dotnet publish "" -c Release -o /app 不会生成文档 XML 文件,除非您选中Release配置的复选框。