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

问题描述 投票:1回答:3

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

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

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

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

COPY publish .

我要么也喜欢添加/复制包的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>

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

docker swagger-ui asp.net-core-2.0 xml-documentation
3个回答
1
投票

确保已在项目属性 - >构建 - > XML文档文件下检查了发布配置的XML文档复选框。您可能已经检查过它的Debug配置,但没有检查Release Configuration。从项目属性下的下拉列表中选择Release,然后选中XML Documentation file复选框。您的docker RUN dotnet发布“”-c Release -o / app不会生成Documentation XML文件,除非您选中Release配置的复选框。


0
投票

我会回答我自己的问题,因为一位同事发现了如何解决这个问题。您只需要更改nuget包,只需按照以下步骤操作:

  1. 在项目中创建“build”文件夹
  2. 在该文件夹中,使用内容创建扩展名为.targets(例如projectname.targets)的文件 <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <None Include="$(MSBuildThisFileDirectory)projectname.xml"> <Link>projectname.xml</Link> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </None> </ItemGroup>
  3. 编辑csproj文件,在最终的</ Project>标记之前添加它 <ItemGroup> <None Include="bin\$(Configuration)\$(TargetFramework)\projectname.xml" Pack="true" PackagePath="build" /> <None Include="build\projectname.targets" Pack="true" PackagePath="build" /> </ItemGroup> <ItemGroup> <Folder Include="build\" /> <Folder Include="Properties\" /> </ItemGroup>

用您选择的名称替换“projectname”,我们使用了项目的名称。这些修改将在项目的根目录中添加包的xml文档文件,该项目使用它与属性构建操作:无和复制输出目录:总是复制。之后我们可以看到包中的xml注释,如果它是部署在Docker容器中,则不需要修改Docker文件。


0
投票

通常,我们不会在生产环境中公开API文档。该文档对开发环境很有用。

因此,我想出了一个不同的工作。

我使用默认配置运行build&publish命令,即debug。

RUN dotnet build -o /app RUN dotnet publish -o /app

我已经在我的开发环境中部署了这个以供UI开发人员参考。我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.