奇怪的参考错误

时间:2015-11-11 09:24:03

标签: c# visual-studio-2013

我在C#库中有以下代码:

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

namespace Gameloop.Util.Web
{
    public class QPayload : IDisposable
    {
        private byte[] _content;
        private Stream _stream;

        public readonly bool IsStream;

        public QPayload()
        {
            Content = new byte[0];
            IsStream = false;
        }

        public QPayload(byte[] bytes)
        {
            Content = bytes;
            IsStream = false;
        }

        public QPayload(string chars, Encoding encoding = null)
        {
            if (encoding == null)
                encoding = Encoding.UTF8;

            Content = encoding.GetBytes(chars);
            IsStream = false;
        }

        public QPayload(Image image)
        {
            MemoryStream ms = new MemoryStream();
            image.Save(ms, image.RawFormat);
            Content = ms.ToArray();

            IsStream = false;
        }

        public QPayload(Stream stream, bool readNow = false)
        {
            if (readNow)
            {
                _content = ReadToEnd(stream);
                IsStream = false;
                return;
            }

            Stream = stream;
            IsStream = true;
        }

        public byte[] Content
        {
            get
            {
                if (_content != null)
                    return _content;

                return Content = ReadToEnd(_stream);
            }

            private set
            {
                _content = value ?? new byte[0];
            }
        }

        public Stream Stream
        {
            get
            {
                if (_stream != null)
                    return _stream;

                return Stream = new MemoryStream(Content);
            }

            private set
            {
                _stream = value ?? new MemoryStream(new byte[0]);
            }
        }

        public void Dispose()
        {
            Stream.Dispose();
        }

        public string AsString(Encoding encoding = null)
        {
            if (encoding == null)
                encoding = Encoding.UTF8;

            return encoding.GetString(Content);
        }

        public Image AsImage()
        {
            using (MemoryStream ms = new MemoryStream(Content))
            {
                return Image.FromStream(ms);
            }
        }

        public static byte[] ReadToEnd(Stream stream)
        {
            using (stream)
            {
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    stream.CopyTo(memoryStream);
                    return memoryStream.ToArray();
                }
            }
        }
    }
}

当我尝试在使用此库的项目中使用以下代码时,出现错误。

QPayload pay = new QPayload("text");
  

类型' System.Drawing.Image'在一个不是的程序集中定义   引用。您必须添加对程序集“System.Drawing”的引用,   Version = 4.0.0.0,Culture = neutral,PublicKeyToken = xyz'

我在这个库中有许多其他类使用像System.Web这样的引用。但是,当我使用这些类时,我没有错误要求我引用System.Web等。

为什么要求我引用仅供参考使用的类型?

1 个答案:

答案 0 :(得分:3)

您正在构造函数参数中直接使用Image。您必须具有System.Drawing.Image的直接知识才能使用您的类(即使您不使用该构造函数)。这就是VS希望你添加该引用的原因,因为否则你不能使用带有Image的构造函数,因为你的调用代码不知道Image类。

如果在其他类中,System.Web内容的使用是'内部',换句话说,构造函数,属性,方法等不能直接看到,那么你的使用项目不会我不需要了解System.Web。因此,VS没有提及添加该引用。