.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 中的文档时失败的原因。