#.net-6.0 #system.drawing.common
#.net-6.0 #system.drawing.common
Вопрос:
Согласно https://docs.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only Система.Рисование.Общий больше не поддерживается в ОС, отличной от Windows, ЕСЛИ не установлен переключатель конфигурации среды выполнения. Я настроил runtimeconfig.template.json и вижу переключатель:
"runtimeOptions": {
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
внутри файла .runtimeconfig.json в bin/Debug/net6.0
Однако, когда я запускаю приложение в окне Linux, используя dotnet exec app.dll
, я все равно получаю исключение PlatformNotSupportedException
Ответ №1:
Для меня сработало следующее.
Добавление следующей строки в файл .csproj в разделе PropertyGroup:
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
Затем создайте файл с именем runtimeconfig.template.json в том же каталоге, что и файл вашего проекта, содержащий:
{
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
Я использовал команду dotnet publish, которая создала файл [YourAppNameHere].runtimeconfig.json в выходном каталоге, который я предоставил команде dotnet publish.
Для моего 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
}
}
}
Это сработало, когда попытка следовать документации на странице, на которую дана ссылка в вопросе, не сработала. Я думаю, это потому, что я добавлял раздел «runtimeOptions» в файл runtimeconfig.template.json, но команда dotnet publish также добавляла раздел с именем «runtimeOptions», который, похоже, не позволил среде выполнения увидеть «System.Рисование.Включить опцию «Unixsupport».
По этой причине я исключил раздел «runTimeOptions» в моем файле runtimeconfig.template.json, поскольку публикация привела к следующему файлу, который не работал:
{
"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», которые, как я полагаю, приводили к сбою при попытке следовать документации по ссылке из вопроса.
Комментарии:
1. Проблема заключалась во вложенных «runtimeOptions».
2. Это отстой, я использую .net core с эпохи DNX, и каждый раз, когда появляется новое обновление, они вносят какие-то дерьмовые изменения, требующие дерьмового добавления в csproj и другие вещи, чтобы заставить то, что работало, снова работать, это абсолютно расстраивает. И это тоже абсолютно не нужно.
3. Это работает и в .Net Core 3.1. Мне пришлось обновить систему. Рисование. Общий для версии 6 по другой причине и не был уверен, сработает ли это, поскольку у него нет
runtimeconfig.json
файла, но если вы его создадите, он будет работать.