.NET6 System.Drawing.Common 通用解决办法

这篇具有很好参考价值的文章主要介绍了.NET6 System.Drawing.Common 通用解决办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

上下文配置:
        在项目启动时,配置应用程序上下文切换,设置 System.Drawing.EnableUnixSupport,示例代码如下(在Program.cs的Main方法中第一行):

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

.NET6 System.Drawing.Common 通用解决办法,Net6.0,.Net6  

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

{

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

.NET6 System.Drawing.Common 通用解决办法,Net6.0,.Net6

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

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

.NET6 System.Drawing.Common 通用解决办法,Net6.0,.Net6 
环境变量:
        除此之外我们也可以配置环境变量 DOTNET_System_Drawing_EnableUnixSupport 来启用 Unix 支持。

Dockerfile 示例:

ENV DOTNET_System_Drawing_EnableUnixSupport=true


Unix 示例:

export DOTNET_System_Drawing_EnableUnixSupport true

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

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

参考连接:
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文章来源地址https://www.toymoban.com/news/detail-654887.html

到了这里,关于.NET6 System.Drawing.Common 通用解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ubantu 部署.net6(详细)

    更新源 安装运行时 第二步 若报错 #启用 Microsoft PPA 安装.NET Core SDK 安装.NET Core Runtime 检查版本 将项目发布,并上传到ubantu 直接运行 自启动,可替代第7步 安装Supervisor 配置 保持退出后,重新加载启动 记得开防火墙,测试成功 安装运行时报错 参考: https://tecadmin.net/how-to-i

    2024年02月14日
    浏览(28)
  • .NET6创建Windows服务

    之前的文章已经写过了创建Windows服务。 C#创建Windows服务_c# 创建windows服务_故里2130的博客-CSDN博客  不过之前使用的是.NET Framework创建的Windows服务。现在已经2023年了,其中vs2022有新的方法去创建Windows服务,本次使用.NET6创建Windows服务。 1.选择如图所示,其中vs2022这样的,vs

    2024年02月10日
    浏览(25)
  • .NET6导入导出Excel

    一、使用NPOI导出Excel //引入NPOI包 HTML JS C# 二、使用NPOI导入Excel HTML JS C# 控制器代码 添加ExcelHelper类 添加Extensions类 添加实体类UserEntity,要跟Excel的列名一致 Excel模板 实现效果

    2024年02月12日
    浏览(29)
  • .Net6 MVC文件介绍

    .Net6 MVC文件介绍 .csproj 文件 在解决方案资源管理器中双击项目名称以在编辑器中打开 .csproj 文件。右键单击项目,然后单击编辑项目文件以编辑 .csproj 文件。如下图所示。 Project Sdk = \\\"Microsoft.NET.Sdk.Web\\\"     PropertyGroup     TargetFramework net6 . 0 /TargetFramework     Nullable enable / N

    2024年02月05日
    浏览(38)
  • net6支持的windows版本

    微软官方文档https://learn.microsoft.com/zh-cn/dotnet/core/install/windows?tabs=net60 .NET 6 支持下列 Windows 版本: (OS)-------------------------------------Version-----------------------体系结构 Windows 11---------------------------21H2--------------------------x64、Arm64 Windows 10 客户端 -----------------1607±-----------------------x

    2024年02月07日
    浏览(30)
  • .NET6 获取请求的ip

    在.NET 6中,获取请求的IP地址需要使用 HttpContext 类。 HttpContext 对象提供了访问当前HTTP请求和响应的方法和属性,其中之一就是远程IP地址。 1.为了获取请求的IP地址,首先需要通过 HttpContext 获取到 IHttpContextAccessor 接口的实现。这个接口提供了有关当前HTTP连接的信息,包括远

    2024年04月11日
    浏览(33)
  • 基于.NET6搭建WebAPI项目

     点击运行后自动打开浏览器,看到如下信息: 系统启动日志如下: 此数据对用户不友好。 nuget安装  Microsoft.AspNetCore.Mvc.NewtonsoftJson   安装成功:  只需要在Program.cs 文件下添加几行代码 找到 builder.Services.AddControllers()   代码如下:  测试结果如下: 打开Xml文件生成,右键

    2023年04月08日
    浏览(39)
  • C#/.NET6项目的搭建

    目录 一.下载Visual Studio: 二.下载.NET6的SDK文件: 三:下载Visual Studio Code: 四.新建一个项目  1.根据自己的需求选择项目类型  2.项目的启动​编辑 五.创建MVC项目   1.项目结构 1.文件配置信息: 2.根目录 存储着静态文件: 3.启动项:  4.MVC三层: Controllers appsettings.json Prog

    2024年02月04日
    浏览(33)
  • .NET6.0实现IOC容器

    IOC 的作用这里省略…只对如何使用进行说明。 这里使用 .NET6.0 WebAPI 应用 下面是在 program 类中的代码 通过在 Controller 的构造函数中注入 IAuthService 启动后,通过 swagger 发起请求,验证接口。 基本 IOC容器 流程已实现。但是这样存在一个弊端,每个接口和实现都要在 program 中手

    2024年02月10日
    浏览(32)
  • .net6智能提示设置为中文

    在VS2022中,框架.NET6的智能提示是英文版本的,其实修改的方法很简单,手动改也十分方便。 一、首先先去微软官网下载语言包,现在官网还没出现.net6得语言包,先下载.net5得语言包 https://dotnet.microsoft.com/en-us/download/intellisense 如图 ]) 二、将文件dotnet-intellisense-5.0-zh-hansMicr

    2024年02月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包