«Вы должны добавить ссылку на сборку» ошибка компилятора в странном случае - PullRequest
4 голосов
/ 18 августа 2011

У меня есть два приложения App1 и App2.App1 добавил ссылку на App2, а App2 добавил ссылку на System.Drawing.

В App2 есть функция с двумя перегрузками, первая из которых защищена и имеет параметр от System.Drawing.Bitmapа второй public имеет целочисленный параметр.

namespace App1Namespace
{
    class Program
    {
        static void Main(string[] args)
        {
            App2Namespace.StaticClass.Func(4);

namespace App2Namespace
{
    public class StaticClass
    {
        protected static void Func(System.Drawing.Bitmap bitmapParam) { }
        public static void Func(int intParam) { }

При сборке App1 будет выдана следующая ошибка времени компиляции:

Ошибка 1 Тип 'System.Drawing.Bitmap' определен в сборке, на которую нет ссылок.Вы должны добавить ссылку на сборку 'System.Drawing, версия = 4.0.0.0, Culture = нейтральная, PublicKeyToken = b03f5f7f11d50a3a'.

Хотя Func с параметром Bimap защищен,Приложение 1 должно иметь ссылку на System.Drawing.

Вопрос в том, зачем App1 нужно System.Drawing?и почему эта ошибка появляется только тогда, когда вызывается вторая перегрузка, и не появляется, когда вызывается другая перегрузка (например, с двумя параметрами)?

Примечание. Когда первая перегрузка становится частной, ошибка исчезает.

Ответы [ 2 ]

1 голос
/ 18 августа 2011

Причина, скорее всего, в том, что вы объявляете StaticClass обычным классом. Таким образом, можно переопределить класс в любых ссылочных сборках (таким образом, использование protected почти имеет смысл для статического метода). Если все методы действительно статические, сделайте сам класс статичным и измените область действия с protected на internal или private.

0 голосов
/ 18 августа 2011

Возможно, просто нужна ссылка, потому что ваш App2Namespace.StaticClass.Func может быть унаследован от (так как он защищен) в классе в пространстве имен App1. Если это произойдет, потребуется ссылка на System.Drawing.

...