在Docker容器

时间:2017-11-08 12:02:14

标签: docker swagger-ui asp.net-core-2.0 xml-documentation

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

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

nuget包(也是由我们创建)包含一个xml文档文件,我们可以在本地计算机上运行服务时使用它。 通过调用.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}应替换为您的包的实际名称。路径中的通配符使其与版本无关(尽管我们必须检查这是否会导致问题,因为我们有多个版本)。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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文件,在最终的&lt; / Project&gt;之前添加它。标签

    <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>
    
  4. 用您选择的名称替换“projectname”,我们使用了项目名称。 这些修改将在包含它的项目的根目录中添加包的xml文档文件,其中包含属性Build Action:None和Copy to Output Directory:Copy always。 之后我们可以看到包中的xml注释,如果它部署在Docker容器中,则不需要修改Docker文件。

答案 2 :(得分:0)

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

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

我已经运行了构建&amp;使用默认配置发布命令,即debug。

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

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