Проблема с конвертацией XAML в PNG, NetCore 3.1
Есть задача, переписать сервис с NetFramework 4.6.1, на netcore 3.1, с возможностью кросс-платформенного запуска приложения, однако в процессе миграции столкнулся с проблемой.
Приложение получает некий документ в формате PDF и штамп(ы), который(е) должны быть наложены на страницы этого самого документа, в формате XAML. Насколько я могу понять, XAML это формат WPF, который содержит информацию о разметке страницы. В пространстве System.Windows.Markup есть класс, который умеет парсить XAML, однако его реализция под NetCore (Microsoft.WindowsDesktop.App.WPF), по какой-то причине выдаёт ошибку:
System.Windows.Markup.XamlParseException: '"Вызов конструктора для типа "System.Windows.Controls.Canvas", удовлетворяющего указанным ограничениям привязки, привел к выдаче исключения.": номер строки "8" и позиция в строке "2".'
InvalidOperationException: Вызывающим потоком должен быть STA, поскольку этого требуют большинство компонентов UI.
Я пытался запустить тесты с аннотацией [STAThread], но это проблему не решает, к тому же совершенно непонятно, будет ли оно вообще работать в кросс-платформенном приложении.
Помимо этого, я попытался использовать для парсинга кросс-платформенную библиотеку AvaloniaUI, которая так же предоставляет методы для работы с XAML, но она до конца не дописана, не все методы реализованы, а те что реализованы, работают с ошибками, плюс ко всему XAML парсится некорректно, возможно из-за различий Xaml диалекта.
Код конвертера выделенный в отдельный NetCore WPF проект:
using System.IO;
using System.Windows;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace XamlLib
{
public class XamlToPngConverter : IConverter
{
public byte[] ByteArray { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public XamlToPngConverter()
{
}
public Stream Convert()
{
var mstream = new MemoryStream(ByteArray);
var xaml = XamlReader.Load(mstream); // В этом месте возникает ошибка
var element = xaml as FrameworkElement;
Size renderingSize = new Size(Width, Height);
element.Measure(renderingSize);
Rect renderingRectangle = new Rect(renderingSize);
element.Arrange(renderingRectangle);
RenderTargetBitmap png = new RenderTargetBitmap(Width, Height, 96, 96, PixelFormats.Default);
png.Render(element);
PngBitmapEncoder enc = new PngBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(png));
var ms = new MemoryStream();
enc.Save(ms);
return ms;
}
}
public interface IConverter
{
public byte[] ByteArray { get; set; }
public int Width { get; set; }
public int Height { get; set; }
Stream Convert();
}
}
Собственно, вопросы: 1. Будет ли работать вообще приложение с использованием библиотеки Microsoft.WindowsDesktop.App.WPF, скажем под линукс? 2. Существуют ли другие библиотеки для конвертации XAML в PNG? Насколько я понимаю падает именно парсинг XAML, так что интересует библиотека с парсером XAML.
В гугле не забанили, просто уже даже и не знаю что гуглить, слишком многое уже перегуглено. Заранее спасибо за любую помощь.