Переносимая библиотека классов - ссылка на тип MarshalByRefObject утверждает, что она определена в mscorlib, но не может быть найдена

У меня есть обычная библиотека классов с функцией, которая преобразует массив байтов в изображение.

Теперь я удалил эту библиотеку классов и создал Portable Class Library с тем же именем, и теперь код, похоже, больше не работает и выдает ошибку в функции "FromStream":

Ссылка на тип MarshalByRefObject утверждает, что она определена в mscorlib, но не может быть найдена

using System;
using System.Drawing;
using System.IO;

namespace App.Converters
{
    public static class Converter
    {
        public static Image ToImage(this byte[] byteArray)
        {
            try
            {
                return Image.FromStream(new MemoryStream(byteArray));
            }
            catch
            {
                throw new FormatException("Data is not an image");
            }
        }
    }
}

Мой проект нацелен на:

  • .NET Framework 4.5
  • ASP.NET Core 1.0
  • Windows 8
  • Windows Phone 8.1
  • Xamarin.Android
  • Xamarin.iOS
  • Xamarin.iOS (Классический)

Это потому, что "что-то" не поддерживается в одной из платформ, на которые я нацеливаюсь? Тогда почему VS позволяет мне использовать и показывать его в автозаполнении?

1 ответ

 using System.Drawing;

Это, вероятно, немного больше относится к тому, что вы сделали, чтобы получить это сообщение об ошибке. Вы использовали кувалду, чтобы распознать эту директиву. Мы должны догадаться об этом, но вы могли бы сделать это одним способом: Project > Add Reference > Browse> выбрать System.Drawing.dll из подкаталога c:\windows\microsoft.net. Кажется, работает просто отлично.

И, вероятно, вы использовали подобный вид кувалды на mscorlib.dll для распознавания MarshalByRefObject. Хотя сделать это намного сложнее, поскольку среда IDE может определить, что она недействительна, mscorlib.dll уже включен в набор ссылок. Может быть, вы редактировали файл проекта вручную, трудно догадаться.

Не используйте кувалды.

Проект PCL уже содержит ссылку на все сборки фреймворка, которые вы можете использовать. Они не перечислены отдельно в узле References вашего проекта, они свернуты в одном узле ".NET".

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

System.Drawing доступен только на настольных компьютерах. Кроме того, MBRO доступен только в полной версии CLR, но не в версии.NETCore. Не может работать, MBRO требует удаленного взаимодействия, функции, которая была вырезана из.NETCore, чтобы сделать его "основным". Вам нужно будет найти другой способ выполнить то, что вы хотите сделать. Нет указаний, вопрос недостаточно подробный.

Другие вопросы по тегам