System.Drawing.Common workaround in .NET6

System.Drawing.Common workaround in .NET6

Intro

最近有不少小伙伴在升级 .NET 6 时遇到了 System.Drawing.Common 的问题,同时很多库的依赖还都是 System.Drawing.Common ,而 .NET 6 默认情况下只在 Windows 上支持使用,Linux 上默认不支持这就导致在 Linux 环境上使用会有问题,所以想介绍下 .NET 6 中 Linux 上使用 System.Drawing.Common 的解决办法

App Context

在项目启动时,配置 AppContext Switch,设置 System.Drawing.EnableUnixSupport,示例代码如下:

System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);

Runtime Config Json

在应用 build/publish 之后,会有一个 *.runtimeconfig.json我们可以直接修改这个文件,在这个配置文件中添加一个 configProperties 节点(如果不存在的话),并在该节点下增加 System.Drawing.EnableUnixSupport 配置,配置如下:

{"runtimeOptions": {"configProperties": {"System.Drawing.EnableUnixSupport": true}}
}

MS Build

我们也可以在项目文件中添加一个下面的配置,作用和上面的直接修改 runtimeconfig.json 效果一样,只是 .NET SDK 会在生成的时候将这个配置写入到 runtimeconfig.json

<ItemGroup><RuntimeHostConfigurationOption Include="System.Drawing.EnableUnixSupport" Value="true" />
</ItemGroup>

Environment Variable

除此之外我们也可以配置环境变量 DOTNET_System_Drawing_EnableUnixSupport 来启用 Unix 支持

Dockerfile 示例:

ENV DOTNET_System_Drawing_EnableUnixSupport=true

Unix 示例:

export DOTNET_System_Drawing_EnableUnixSupport true

More

个人推荐使用项目文件配置或者是环境变量的方式,如果不想修改代码,就使用环境变量的方式,如果觉得环境变量不方便就使用项目文件配置,直接修改 runtimeconfig.json 的方式有点不太好维护,至于 AppContext Switch 个人感觉有点侵入代码,不如项目文件或者环境变量干净

如果基于 Docker 容器部署,更加推荐使用环境变量方式,直接在 Runtime 镜像中配置一个环境变量即可,这样无论什么地方需要部署都已经写在了镜像环境中,在哪里跑都是一样的,可以参考:https://github.com/OpenReservation/ReservationServer/blob/dev/Dockerfile#L10

References

  • https://docs.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only

  • https://github.com/dotnet/designs/pull/234

  • https://github.com/dotnet/runtime/pull/55962

  • https://docs.microsoft.com/en-us/dotnet/core/run-time-config

  • https://guochen2.github.io/2021/11/13/netcore/net6%E7%BB%98%E5%9B%BE%E7%BB%84%E4%BB%B6System.Drawing.Common%E5%BC%82%E5%B8%B8/

  • https://github.com/dotnet/sdk/blob/a5f5bb5183517cb301050288b25c9c727e52e8a6/src/Tasks/Microsoft.NET.Build.Tasks/GenerateRuntimeConfigurationFiles.cs#L166

  • https://github.com/OpenReservation/ReservationServer/blob/dev/Dockerfile#L10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqlyog怎么设置默认值_物联网卡三网APN设置

下面以移动卡APN设置为例&#xff0c;电信卡&#xff0c;联通卡APN设置只需要按照操作把对应的APN添加即可。安卓手机设置方法: 设置→移动网络→接入点名称&#xff08;apn&#xff09;→新建一个apn(并开启漫游)苹果手机设置方法:①设置→通用→关于本机→名称②设置→蜂窝移…

mysql在linux下修改存储路径

通过下面几步即可修改路径&#xff0c;这里的路径都是测试的路径&#xff0c;一般默认安装路径在/var/lib/mysql下&#xff0c;真正配置按照真实路径配置。 1、修改/etc/sysconfig/selinux文件&#xff1a;#SELINUXenforcingSELINUXdisabled重启服务器可以通过sestatus命令查看…

Android之动画精讲一:从setTranslationX谈属性动画和view动画的区别

转载&#xff1a;http://blog.csdn.net/yanzi1225627/article/details/47850471 最近又用到了动画&#xff0c;决定把几次项目里用到的动画走过的弯路总结一下&#xff0c;顺便梳理下android的动画体系。众所周知&#xff0c;android动画分三类&#xff1a;一是View 动画&…

现在的娃娃有多智能?

1 我的12月&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 抱歉啊女儿...&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 一看就很厉害的名字▼4 突然的潮流&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼5 上下班的表情管理&#xff08;素…

Nats的消息通信模型

版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/50996679 Nats的消息通信模型 作者&#xff1a;chszs&#xff0c;未经博主允许不得转载。经许可的转载需注明作者和博客主页&#xff1a;http:…

c#将http调用返回额json中的有关中文的unicode转换为中文

中文转Unicode&#xff1a;HttpUtility.UrlEncodeUnicode(string str);转换后中文格式&#xff1a;"%uxxxx" 举例&#xff1a;"柳_abc123" 转换结果是&#xff1a;"%u67f3_abc123" Unicode转中文1&#xff1a;HttpUtility.UrlDecode(string st…

计算机常用英文句子,英文简历常用句子

思想成熟上进心强并具极丰富的人际关系技巧&#xff0c;有良好的管理艺术和组织能力&#xff0c;职场秘籍为个人简历添彩经典句子&#xff0c;思想成熟上进心强并具极丰富的人际关系技巧&#xff0c;有很高的领导艺术和很强的集体精神。英文简历常用句子2017-07-04 04:57:40 | …

.NET6之MiniAPI(一):开始Mini API

Mini API之前的官方.net web框架&#xff0c;都是偏重的&#xff0c;不像其他语言&#xff0c;如go&#xff0c;python&#xff0c;或基于c#的nancy&#xff0c;都是简洁方式来开启web之旅的。所以有小伙伴就吐槽.net基于web的不友好性&#xff0c;这不&#xff0c;.net6中官方…

超线程_超线程加核显 i310100+梅捷H410超值爆款组合

酷睿i3-10100是一颗4核心8线程&#xff0c;三级缓存6MB&#xff0c;主频3.6-4.3GHz&#xff0c;集成核显UHD 630 350-1100MHz&#xff0c;热设计功耗65W。对比上代酷睿i3-9100&#xff0c;它增加了超线程技术&#xff0c;加速频率高了100MHz&#xff0c;其他不变。为什么在短短…

JSTL(fn函数)

JSTL&#xff08;fn函数&#xff09; 首先&#xff0c;我们要在页面的最上方引用&#xff1a; <% taglib prefix"fn" uri"http://java.sun.com/jsp/jstl/functions" %> 下面是JSTL中自带的方法列表以及其描述&#xff1a; fn:contains(string, sub…

Hibernate之悲观锁与乐观锁

http://blog.csdn.net/a19881029/article/details/20665663 如果需要保证数据访问的排它性&#xff0c;则需对目标数据加“锁”&#xff0c;使其无法被其它程序修改 一&#xff0c;悲观锁 对数据被外界&#xff08;包括本系统当前的其它事务和来自外部系统的事务处理&#xff0…

他本硕博连跨3大专业,毕业后没多久被破格聘为985高校教授!

全世界只有3.14 % 的人关注了爆炸吧知识本文来源&#xff1a;募格学术整合自东南大学新闻网、东南大学校团委、募格课堂图片&#xff1a;网络来源&#xff1a;东南大学新闻网、东南大学校团委他从本科的计算机专业&#xff0c;到研究生的应用数学专业&#xff0c;再到博士开始研…

.Net之代码优先gRPC服务

介绍该方式适用于多个服务之前都是**.Net项目**的场景优点&#xff1a;可以在 .NET 服务器和客户端之间共享 .NET 服务和数据协定类型。无需在 .proto 文件和代码生成过程中定义协定。操作引用组件创建一个共享的类库ShareProto&#xff0c;该类库可以被服务端和客户端进行访问…

转JS总结1--(CSS书写规范和正则表达式)

一、CSS书写规范&#xff1a; 1、文字&#xff1a;font: font-style font-variant font-weight font-size/line-height font-family; 2、边框&#xff1a;border:border-width border-style border-color; 3、背景&#xff1a;background:background-color background-image ba…

Winform VS2015打包

首先 &#xff0c;我们要去官网http://learn.flexerasoftware.com/content/IS-EVAL-InstallShield-Limited-Edition-Visual-Studio注册一个账号已获得installshiled的注册码。 是免费的~ 注册完后就可以下载我们的第三方打包工具&#xff1a; 注意&#xff1a;这里下载并安装完…

触发键盘_雷蛇这款光轴机械键盘开箱评测,光速触发,颜值爆表

首先感谢头条众测给予雷蛇猎魂光蛛精英版机械键盘的测评机会&#xff0c;雷蛇作为在游戏设备领域深耕的领先者&#xff0c;其生产的游戏设备深得游戏玩家喜爱&#xff0c;下面我们来一睹这款雷蛇机械键盘的风采。首先从包装盒正面可以感受到这款雷蛇光学机械轴键盘霸气侧漏&…

会计电算化的重要物质基础计算机和,湖北工业大学工程技术学院会计电算化管理办法...

湖北工业大学工程技术学院会计电算化管理办法第一章 总则第一条为了进一步加强会计电算化工作&#xff0c;使会计电算化更加规范化、程序化&#xff0c;保障财务工作高效运行&#xff0c;根据《中华人民共和国会计法》、财政部《会计电算化管理办法》和《会计电算化工作规范》等…

spring之使用Spring Security实现权限管理

转载&#xff1a;http://hanqunfeng.iteye.com/blog/1155226 目录 SpringSecurity3.X--一个简单实现 SpringSecurity3.X--前台与后台登录认证 SpringSecurity3.X--remember-me SpringSecurity3.X--验证码 作者对springsecurity研究不深&#xff0c;算是个初学者吧&#xff0c;最…

单元测试之道

Nunit with VS2012: 构建单元测试步骤 1.下载Nunit 2.6.2&#xff0c;解压到某个path&#xff1b; 2.在VS2012 上构建自己的library工程&#xff1b; 3.添加引用&#xff1a;nunit.framework.dll; 4.添加UunitTest类&#xff1a;在该类中using nunit.framework.dll&#xff0c;…

iNeuOS工业互联网操作系统,提升分布式云端控制安全策略和增加实时日志功能...

目 录1. 概述... 22. 平台演示... 23. 云端控制策略和应用过程... 23.1 云端控制策略... 23.2 控制应用过程... 34. 实时日志... 71. 概述这次升级主要提升云端控制的安全策略&#xff0c;不管公有云部署或是私有云部署&#…