5

根据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
      }
    }

在 bin/Debug/net6.0 中的文件 .runtimeconfig.json 中

但是,当我在 linux 机器中运行应用程序时,dotnet exec app.dll我仍然得到 PlatformNotSupportedException

4

1 回答 1

6

以下对我有用。

将以下行添加到 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
    }
  }
}

这有效,但尝试遵循问题中链接到的页面上的文档却没有。我认为这是因为我在 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”,我认为在尝试遵循问题链接中的文档时会导致它失败。

于 2021-12-17T00:51:07.637 回答