可移植类库 - 类型'MarshalByRefObject'的引用声称它在'mscorlib'中定义,但无法找到

时间:2017-02-09 09:21:16

标签: c# .net portable-class-library system.drawing

我有一个普通的类库,其函数可以将字节数组转换为图像。

现在我删除了那个类库,并创建了一个具有相同名称的可移植类库,现在代码似乎不再起作用,并且在“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 个答案:

答案 0 :(得分:3)

 using System.Drawing;

这可能与您为获取此错误消息所做的更为相关。您使用大锤来获取使用指令。我们必须猜测它,但你可能采取的一种方式是Project>添加参考>浏览按钮>从c:\ windows \ microsoft.net子目录中选择System.Drawing.dll。 似乎工作正常。

据推测,你在mscorlib.dll上使用了类似的大锤来识别MarshalByRefObject。虽然这很难做,因为IDE可以判断它无效,但mscorlib.dll已经包含在引用集中。也许你手工编辑了项目文件,很难猜到。

不要使用大锤。

PCL项目已经引用了您可能使用的所有框架程序集。它们未单独列在项目的“引用”节点中,它们在单个“.NET”节点中折叠。

这样做并不是为了让你的生活变得悲惨,它确保你不会意外地使用你选择的某个目标上没有的课程。在您花费数周时间编写代码,在开发机器上测试完美并现在尝试在手机上运行它之后,可以避免在最糟糕的时间发现。 Kaboom,无法工作。上了一条小溪,没有划桨,几周就丢了。

System.Drawing仅适用于台式机。同样,MBRO仅适用于CLR的完整版本,而不适用于.NETCore版本。无法工作,MBRO需要远程处理,这一功能从.NETCore中删除,使其成为“核心”。你必须找到另一种方法来完成你想做的事情。没有指导,问题不够详细。