首页 > 其他分享 >dotnet7下docker镜像构建之XML打包丢失问题

dotnet7下docker镜像构建之XML打包丢失问题

时间:2023-08-17 16:24:50浏览次数:40  
标签:XML xml dotnet7 microsoft 7.0 dotnet docker com App

注意

暂时值适用 .NET SDK 7.0.100以上
其他版本,可以参考举例中的配置host项目

省流原因

dotnet publish 发布命令对于引用项目的xml不会拷贝到发布目录

举例

host项目依赖api项目,api项目依赖utils包,utils包中的xml文件在host项目swagger需要使用
xml文件

一般包引用xml文件输出配置,以下项目配置将包中二级目录**.xml拷贝到输出目录(构建/发布)

<ItemGroup>
	<PackageReference Include="xxx.yyy" Version="1.0.0">
		<CopyToOutputDirectory>*\*.xml</CopyToOutputDirectory>
	</PackageReference>
</ItemGroup>

<Target Name="AfterTargetsBuild" AfterTargets="Build">
	<ItemGroup>
		<PackageReferenceFiles
			   Condition="%(PackageReference.CopyToOutputDirectory) != ''"
			   Include="$(NugetPackageRoot)\%(PackageReference.Identity)\%(PackageReference.Version)\%(PackageReference.CopyToOutputDirectory)" />
	</ItemGroup>
	<Message Text="Build Copying XML docs to $(OutputPath)" Importance="High" />
	<Copy SourceFiles="@(PackageReferenceFiles)" DestinationFolder="$(OutDir)" />
</Target>

<Target Name="AfterTargetsPublish" AfterTargets="Publish">
	<ItemGroup>
		<PackageReferenceFiles
			   Condition="%(PackageReference.CopyToOutputDirectory) != ''"
			   Include="$(NugetPackageRoot)\%(PackageReference.Identity)\%(PackageReference.Version)\%(PackageReference.CopyToOutputDirectory)" />
	</ItemGroup>
	<Message Text="Publish Copying XML docs to $(PublishDir)" Importance="High" />
	<Copy SourceFiles="@(PackageReferenceFiles)" DestinationFolder="$(PublishDir)" />
</Target>

解决方案

第一步:

项目配置中添加一下配置项
CopyDocumentationFilesFromPackages
将此属性设置为 true 时,将项目中 PackageReference 项的所有生成的 XML 文档文件复制到生成输出。 请注意,启用此功能将导致部署捆绑包大小增加。

此属性是在 .NET SDK 7.0.100 中引入的,尽管它默认为未指定。

<PropertyGroup>
	<CopyDocumentationFilesFromPackages>true</CopyDocumentationFilesFromPackages>
</PropertyGroup> 

第二步:

Dockerfile 文件配置关键
添加环境变量 NUGET_XMLDOC_MODE none 支持xml作为普通文件输出

微软推荐的镜像构建流程如下
此 Dockerfile 使用多阶段生成,通过分层生成并仅保留所需的项目来优化映像的最终大小。 有关详细信息,请参阅 Docker 文档:多阶段生成。

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env
WORKDIR /App

# Copy everything
COPY . ./
# Restore as distinct layers
RUN dotnet restore
# Build and publish a release
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /App
COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]

以上构建镜像后会缺失xml文件
修改后

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env
WORKDIR /App

// 注意
ENV NUGET_XMLDOC_MODE none

# Copy everything
COPY . ./
# Restore as distinct layers
RUN dotnet restore
# Build and publish a release
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:7.0

// 注意
ENV NUGET_XMLDOC_MODE none

WORKDIR /App
COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]

参考文章

标签:XML,xml,dotnet7,microsoft,7.0,dotnet,docker,com,App
From: https://www.cnblogs.com/LandWind/p/17637924.html

相关文章

  • Docker容器设置自启动
    容器自启动分为两种情况一为新建容器时配置自启参数dockerrun--restart=always容器id或容器名称二为已存在的容器配置自启dockerupdate--restart=always容器id或容器名称取消容器自启dockerupdate--restart=no容器id或容器名称批量设置容器自启dockerupda......
  • 如何找到docker容器中的网卡外联的veth pair的另一张网卡
    1、概述在Docker容器中,每个容器都有一个或多个网络接口(网卡),用于连接容器内部与宿主机或其他容器进行通信。这些网络接口中的一些可能是vethpair,也就是虚拟以太网对,它们以成对的方式存在,一侧连接到容器内部,另一侧连接到宿主机的网络命名空间。vethpair的一侧称为......
  • 云原生之使用Docker部署webos私有云盘
    (云原生之使用Docker部署webos私有云盘)一、webos介绍1.webos简介WebOS是一个支持多种存储,云端存储&协同办公新体验:如Windows11体验的私有云盘/企业网盘。完全支持私有化部署,存储安全可控、数百种文件格式在线预览、编辑和播放、轻松分享。高效协作,细粒度权限管控全平台客户端......
  • PLSQL:DBMS_XMLPARSER包
    使用==DBMS_XMLPARSER==,你可以访问XML文档的内容和结构。它描述了处理XML文件的计算机程序的行为。在结构上看,XML文档和SGML文档是一样的。XML文档是由称为==实体==的存储单元组成的,实体中包含解析的和未被解析的数据。解析后的数据由字符串组成,其中一些代表字符数据,一些代表标记......
  • 常见应用的docker-compose.yml配置
    MYSQLversion:"3"services:db:image:mysql:5.7.35privileged:truerestart:alwaysenvironment:MYSQL_ROOT_PASSWORD:CREC_2021TZ:Asia/Shanghaicommand:--lower_case_table_names=1--max_connecti......
  • Docker数据持久化与数据共享
    上篇文章的最后我们使用Docker部署了一个纯前端项目,但还有一个很重要的问题就是容器中产生的数据(比如log文件),容器一旦被删除,容器内的所有数据也就没有了,为了避免这个问题我们可以将数据存储到容器之外(比如宿主机),这样即使删除容器也不会丢失数据。一旦容器故障,我们可以重新创建一个......
  • Dockerfile快速上手
     Dockerfile就是用来构建docker镜像的文件,就是一段命令脚本步骤:1:创建dockerfile文件 注:如果想直接build需要文件名为dockerfile2:在文件中编写命令   注:Dockerfile中的命令全部是大写,命令是一层一层发布例如:FROMcentosVOLUME["volume01","volume02"]CMDecho"---......
  • docker mysql
    dockerpullmysql:8.0.16------------------------------------------------------------------------------------------------------------------------------------------------dockerrun\-p3306:3306\-eMYSQL_ROOT_PASSWORD=123456\-v/home/dock......
  • centos7离线安装docker
    1.下载docker安装包: https://download.docker.com/linux/static/stable/x86_64/2.解压文件docker-20.10.9.tgz 3.复制到/usr/bin文件夹下cpwork/docker/*/usr/bin/4.注册Docker为服务,进入 /etc/systemd/system/ 目录,并创建 docker.service 文件。vi/etc/sys......
  • Docker容器怎么安装Vim编辑器
    ​ 在现代软件开发和系统管理中,Docker已经成为一个不可或缺的工具。它允许我们轻松地创建、部署和运行应用程序,以及构建可移植的容器化环境。然而,在Docker容器中安装特定的工具可能会有一些挑战,因为容器本身是精简的、隔离的运行环境。在本文中,我们将讨论如何在Docker容器中安装......