Как развернуть .net DLL, которая вызывает в нем UWP OCR API? - PullRequest
0 голосов
/ 14 января 2019

У меня есть библиотека .NET-оболочки, основанная на .NET Framework v4.6.1, которая вызывает UWP OCR API. Он содержит только один класс с одной функцией, код ниже

public static async Task<string> ExtractText(Stream stream, string language)
        {
            using (IRandomAccessStream uwpStream = new InMemoryRandomAccessStream())
            {
                byte[] input = new byte[stream.Length];
                stream.Read(input, 0, input.Length);
                uwpStream.AsStreamForWrite().Write(input, 0, input.Length);
                uwpStream.AsStreamForWrite().Flush();
                uwpStream.Seek(0);
                BitmapDecoder decoder = await BitmapDecoder.CreateAsync(uwpStream);
                SoftwareBitmap bitmap = await decoder.GetSoftwareBitmapAsync();
                OcrEngine engine = OcrEngine.TryCreateFromLanguage(new 
                                              Language(language));
                uwpStream.Dispose();
                if (engine != null)
                {
                    OcrResult result = await engine.RecognizeAsync(bitmap);
                    return result.Text;
                }
                else
                {
                    throw new NullReferenceException("Language is not supported");
                }
            }
        }

Проект имеет ссылки на следующие библиотеки UWP: Windows.WinMD, Windows.Foundation.FoundationContract.winmd, Windows.Foundation.UniversalApiContract.winmd. Я нашел их местоположение в браузере объектов в Visual Studio, скопировал их из исходного местоположения в подпапку в моем проекте и затем связал их.

Мое приложение работает нормально на моем локальном компьютере, и UWP OCR Engine работает нормально.

Затем я развертываю свою библиотеку и приложение, которое ее использует, на моей виртуальной машине, на которой установлен Windows Server 2012 R2 с установленным .NET Framework и установленным Windows 10 SDK. Моя программа не работает во время выполнения, за исключением: Не удалось найти тип среды выполнения Windows "Windows.Graphics.Imaging.SoftwareBitmap"

Чтобы решить эту проблему, я попытался переустановить Windows 10 SDK на своем виртуальном сервере и проверил, совпадают ли версии с точными версиями на моей машине для разработки. Похоже, что некоторые из библиотек .winmd не загружаются во время выполнения.

Я ожидаю, что моя программа будет успешно запущена на другом компьютере в режиме выпуска. Работает на разработку машины нормально. Тем не менее, я новичок в UWP, поэтому, возможно, исходной информации недостаточно для решения проблемы, но я готов предоставить больше.

Буду признателен за любую помощь

1 Ответ

0 голосов
/ 15 января 2019

Мне удалось настроить распознавание UWP на Windows Server 2019 Похоже, что Windows Server 2012 R2 не поддерживает все функции Windows 10 SDK По крайней мере, моя программа не смогла загрузить все файлы .winmd, необходимые во время выполнения. Миграция на Windows Server 2019 позволяет работать без проблем

...