.NET 6 System.Drawing.Common 运行时开关
.NET 6 System.Drawing.Common Runtime Switch
根据 https://docs.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only System.Drawing.Common 在非 windows OS 下不再受支持,除非设置了 运行 时间配置开关。我已经设置 runtimeconfig.template.json 并看到开关:
"runtimeOptions": {
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
在文件 .runtimeconfig.json 中 bin/Debug/net6.0
然而,当我 运行 应用程序在 linux 框中使用 dotnet exec app.dll
我仍然得到 PlatformNotSupportedException
以下对我有用。
在 PropertyGroup 部分的 .csproj 文件中添加以下行:
<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
}
}
}
这行得通,但在问题中尝试按照 linked 页面上的文档进行操作却行不通。我认为这是因为我在 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”,我认为这是导致它在尝试遵循问题 link 中的文档时失败的原因。
根据 https://docs.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only System.Drawing.Common 在非 windows OS 下不再受支持,除非设置了 运行 时间配置开关。我已经设置 runtimeconfig.template.json 并看到开关:
"runtimeOptions": {
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
在文件 .runtimeconfig.json 中 bin/Debug/net6.0
然而,当我 运行 应用程序在 linux 框中使用 dotnet exec app.dll
我仍然得到 PlatformNotSupportedException
以下对我有用。
在 PropertyGroup 部分的 .csproj 文件中添加以下行:
<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
}
}
}
这行得通,但在问题中尝试按照 linked 页面上的文档进行操作却行不通。我认为这是因为我在 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”,我认为这是导致它在尝试遵循问题 link 中的文档时失败的原因。