Xamarin.iOS не распознает тип Bitmap из упомянутого System.Drawing.Common

С помощью Visual Studio 15.8.1 в Windows (на Mac с использованием Parallels) я создал приложение iOS с помощью Xamarin.iOS, предназначенное для iOS 11.4. Для сборки приложения я настроил агент сборки в macOS, на котором работает последняя версия Xamarin 11.14.0.11.

Затем я создал новую библиотеку .netstandard 2.0, которая ссылается на пакет Microsoft NuGet System.Drawing.Common.

В эту библиотеку я добавил следующий класс:

using System.Drawing;

namespace library
{
    public class SomeClass
    {
        private readonly Bitmap m_bitmap;

        public SomeClass(Bitmap bitmap)
        {
            m_bitmap = bitmap;
        }
    }
}

Затем на библиотеку ссылается проект iOS, и все работает нормально.

В ViewController проекта iOS я добавил следующий код, который использует предыдущий класс, и добавил ссылки на пакет System.Drawing.Common, чтобы иметь возможность использовать класс Bitmap:

public partial class ViewController : UIViewController
{
    private SomeClass m_someClass;

    public ViewController (IntPtr handle) : base (handle)
    {
        m_someClass = new SomeClass(new System.Drawing.Bitmap());
    }

    // ...
}

Теперь он не строится, и я получаю следующую ошибку:

ошибка CS0234: имя типа или пространства имен «Bitmap» не существует в пространстве имен «System.Drawing» (вам не хватает ссылки на сборку?)

ошибка CS7069: ссылка на тип «Растровое изображение» утверждает, что он определен в «System.Drawing.Common», но не может быть найден

Вопрос

Я следовал ответу на этот вопрос< /а>. Все обновлено (Visual Studio и Xamarin на macOS). Я попытался вручную скопировать System.Drawing.Common из .netstandard20 пакета в вывод, а также добавить DLL непосредственно в проект в качестве ссылки. У меня никогда ничего не работало.

Что нужно сделать?


person Kzrystof    schedule 20.08.2018    source источник
comment
Можете ли вы поделиться репро решением для этого?   -  person Alex Ghiondea - MSFT    schedule 24.08.2018
comment
@ AlexGhiondea-MSFT Ну, все, что я задал в вопросе, - это шаги воспроизведения. Мое фактическое решение включает в себя гораздо больше проектов, но мне удалось воспроизвести проблему с двумя описанными проектами: проект .netstandard 2.0 с указанным классом, на который ссылается приложение Xamarin.iOS. Оба они ссылаются на пакет NuGet System.Drawing.Common (и ничего больше... никакая другая DLL не добавляется вручную).   -  person Kzrystof    schedule 25.08.2018
comment
Спасибо! Мне удалось получить местную копию. Похоже, вы следите за этим в репозитории Mono: github.com/mono/mono/ вопросы/10310   -  person Alex Ghiondea - MSFT    schedule 27.08.2018
comment
@AlexGhiondea-MSFT Верно. Первоначально я открыл ошибку команде CoreFX через несколько часов после того, как задал вопрос здесь, на SO, но был перенаправлен в монокоманду.   -  person Kzrystof    schedule 27.08.2018


Ответы (1)


  1. Нажмите на справочную папку проекта.
  2. Нажмите Добавить ссылку
  3. На вкладке .NET вы найдете System.Drawing
  4. Нажмите «ОК». Это добавит ссылку на System.Drawing
person Lucas Zhang    schedule 21.08.2018
comment
Это был бы путь, если бы я работал с .net framework. Но я нет. - person Kzrystof; 21.08.2018
comment
возможно, это будет полезно для вас github.com/CoreCompat/System.Drawing - person Lucas Zhang; 21.08.2018