贵州旅游网站建设策划书,机械外贸网站建设,普陀网站建设哪家便宜,加强文明网站建设最近有不少小伙伴在升级 .NET 6 时遇到了 System.Drawing.Common 的问题#xff0c;同时很多库的依赖还都是 System.Drawing.Common #xff0c;而 .NET 6 默认情况下只在 Windows 上支持使用#xff0c;Linux 上默认不支持这就导致在 Linux 环境上使用会有问题#xff0c;… 最近有不少小伙伴在升级 .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); 运行时配置Json 在应用 build/publish 之后会有一个 *.runtimeconfig.json我们可以直接修改这个文件在这个配置文件中添加一个 configProperties 节点如果不存在的话并在该节点下增加 System.Drawing.EnableUnixSupport 配置配置如下
{
runtimeOptions: {configProperties: {System.Drawing.EnableUnixSupport: true}} } MS构建 我们也可以在项目文件中添加一个下面的配置作用和上面的直接修改 runtimeconfig.json 效果一样只是 .NET SDK 会在生成的时候将这个配置写入到 runtimeconfig.json 中
ItemGroupRuntimeHostConfigurationOption IncludeSystem.Drawing.EnableUnixSupport Valuetrue / /ItemGroup 环境变量 除此之外我们也可以配置环境变量 DOTNET_System_Drawing_EnableUnixSupport 来启用 Unix 支持。
Dockerfile 示例
ENV DOTNET_System_Drawing_EnableUnixSupporttrue 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