我们有一个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}应替换为您的包的实际名称。路径中的通配符使其与版本无关(尽管我们必须检查这是否会导致问题,因为我们有多个版本)。
答案 0 :(得分:1)
确保已在“项目属性”->“构建”->“ XML文档文件”下选中“ <文档>发布”配置的“ XML文档”复选框。您可能已经检查了它的 Debug 配置,但没有检查 Release 配置。选择项目属性下的下拉菜单中的发布,然后选中XML文档文件复选框。除非您选中发布配置复选框,否则您的docker RUN dotnet发布“” -c版本-o / app不会生成文档XML文件。
答案 1 :(得分:0)
我会回答我自己的问题,因为一位同事发现了如何解决这个问题。 您只需要更改nuget包,只需按照以下步骤操作:
在该文件夹中创建一个扩展名为.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>
编辑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>
用您选择的名称替换“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开发人员参考。 我希望这会有所帮助。