.NET 6 System.Drawing.Common 运行时开关
Posted
技术标签:
【中文标题】.NET 6 System.Drawing.Common 运行时开关【英文标题】:.NET 6 System.Drawing.Common Runtime Switch 【发布时间】:2021-12-10 21:48:09 【问题描述】:根据https://docs.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only System.Drawing.Common 在非 Windows 操作系统下不再支持,除非设置了运行时配置开关。我已经设置了 runtimeconfig.template.json 并看到了开关:
"runtimeOptions":
"configProperties":
"System.Drawing.EnableUnixSupport": true
在 bin/Debug/net6.0 中的 .runtimeconfig.json 文件中
但是,当我使用 dotnet exec app.dll
在 linux 机器中运行应用程序时,我仍然会得到 PlatformNotSupportedException
【问题讨论】:
【参考方案1】:以下内容对我有用。
将以下行添加到 .csproj 文件的 PropertyGroup 部分:
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
接下来在与您的项目文件相同的目录中创建一个名为 runtimeconfig.template.json 的文件,其中包含:
"configProperties":
"System.Drawing.EnableUnixSupport": true
我使用了 dotnet publish 命令,它在我提供给 dotnet publish 命令的输出目录中创建了一个 [YourAppNameHere].runtimeconfig.json 文件。
对于我的 asp.net 项目,发布导致以下 [YourAppNameHere].runtimeconfig.json 文件:
"runtimeOptions":
"tfm": "net6.0",
"includedFrameworks": [
"name": "Microsoft.NETCore.App",
"version": "6.0.1"
,
"name": "Microsoft.AspNetCore.App",
"version": "6.0.1"
],
"configProperties":
"System.Drawing.EnableUnixSupport": true,
"System.GC.Server": true,
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
这行得通,但尝试遵循问题中链接到的页面上的文档却没有。我认为这是因为我在 runtimeconfig.template.json 文件中添加了“runtimeOptions”部分,但 dotnet publish 命令还添加了一个名为“runtimeOptions”的部分,这似乎阻止了运行时看到“System. Drawing.EnableUnixSupport”选项。
因此,我在 runtimeconfig.template.json 文件中排除了“runTimeOptions”部分,因为发布导致以下文件不起作用:
"runtimeOptions":
"tfm": "net6.0",
"includedFrameworks": [
"name": "Microsoft.NETCore.App",
"version": "6.0.1"
,
"name": "Microsoft.AspNetCore.App",
"version": "6.0.1"
],
"runtimeOptions":
"configProperties":
"System.Drawing.EnableUnixSupport": true
,
"configProperties":
"System.GC.Server": true,
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
请注意嵌套的“runtimeOptions”,我认为这会导致它在尝试按照问题链接中的文档进行操作时失败。
【讨论】:
嵌套的“runtimeOptions”是问题所在。 这太糟糕了,我从 DNX 时代就一直在使用 .net 核心,每次有新的更新时,他们都会做出一些糟糕的破坏性更改,需要对 csproj 和其他东西进行糟糕的添加才能使工作正常再次工作,这绝对令人沮丧。而且这个也是绝对没必要的。以上是关于.NET 6 System.Drawing.Common 运行时开关的主要内容,如果未能解决你的问题,请参考以下文章
vs2017创建支持多框架(net4.6.1;net4.6.2;netstandard2.0;netcoreapp2.0)版本
使用.NET 6开发TodoList应用(12.1)——加餐 .NET 6中的HttpLogging简介
使用 .NET 4.6.2 中的 HttpClientFactory