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

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

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

nuget包(也是我们创build的)包含一个xml文档文件,当在本地机器上运行服务时,我们可以使用它。 通过调用.IncludeXmlComments使文档变得可用,并通过获取程序集的path,然后用.xmlreplace.dll扩展来确定文档的path。

我怀疑包的xml doc文件不包含在容器中,因此无法find。 在Dockerfile中,我看到了这个命令

COPY publish . 

我要么喜欢一个命令,也添加/复制包的XML文档文件,或知道如何使XML文档文件的一部分发布资产。 任何其他的解决scheme,使得这个工作在一个强大的方式(不只是在我的机器上)也是受欢迎的。

编辑:我们现在在Docker容器中有额外的XML文档文件,但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}应该被你的包的实际名称replace。 path中的通配符保持版本独立(尽pipe我们必须检查这是否会导致问题,因为我们有多个版本)。

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

  1. 在您的项目中创build一个“构build”文件夹
  2. 在该文件夹中创build一个扩展名为.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> 

用项目名称代替“项目名称”,我们使用项目名称,这些修改将把项目的xml文档文件添加到项目的根目录中。到输出目录:总是复制,之后我们可以看到包中的xml注释,如果它被部署在Docker容器中,则不需要修改Docker文件。