Как установить System.Drawing.Common в проекте, использующем .NETFramework,Version=v4.5.2?

Я пытаюсь написать несколько модульных тестов на С# в приложении .NETFramework, Version = v4.5.2, но все тесты дают следующую ошибку:

«System.IO.FileNotFoundException: не удалось загрузить файл или сборку «System.Drawing.Common, версия = 0.0.0.0, культура = нейтральная, PublicKeyToken = cc7b13ffcd2ddd51». Система не может найти указанный файл.'

Когда я пытаюсь установить System.Drawing.Common, я получаю следующую ошибку из пакета NuGet:

Не удалось установить пакет «System.Drawing.Common 4.5.1». Вы пытаетесь установить этот пакет в проект, предназначенный для .NETFramework, Version=v4.5.2, но пакет не содержит ссылок на сборки или файлов содержимого, совместимых с этой платформой. Для получения дополнительной информации свяжитесь с автором пакета.

Я не могу изменить версию приложения или фреймворк (.NET Core 2.1), и любой другой трюк, который я нашел в Интернете, не работал (или вызывал больше ошибок).

Помощь?

ОБНОВЛЕНИЕ: мне удалось решить эту проблему, перезапустив Visual Studio, изменив фреймворк на 4.6.1 (чего я не мог сделать раньше) и добавив ссылку. Извините за нечеткие объяснения, я новичок, и для меня Visual Studio работает загадочным образом. Всем спасибо


person Irina Gutanu    schedule 04.03.2019    source источник
comment
Вы используете 4.5.x или Core 2.x? Я смущен.   -  person Henk Holterman    schedule 04.03.2019
comment
stackoverflow.com/questions/9190885/   -  person Sachith    schedule 04.03.2019
comment
Поправьте меня, если я ошибаюсь, но мне кажется, что вы пытаетесь добавить пакет nuget System.Drawing.Common в приложение .net 4.5. В .net 4.5 system.drawing является интегрированной частью, и вы просто добавляете его в качестве ссылки в сборках (диспетчер ссылок).   -  person Snorre    schedule 04.03.2019
comment
У меня есть решение с несколькими проектами. Проект, с которым я работаю, имеет целевую структуру Core 2.x. В ошибке упоминается .net 4.5.2.   -  person Irina Gutanu    schedule 04.03.2019
comment
Я пытаюсь добавить ссылку на пакет Drawing.Common. У меня есть dll на компе, но приложение ее не берет, поэтому я попытался установить ее снова и получил другие ошибки   -  person Irina Gutanu    schedule 04.03.2019


Ответы (4)


в NuGet поместите эту строку: Install-Package System.Drawing.Common -Version 4.5.2

в .NET CLI поместите: dotnet add package System.Drawing.Common --version 4.5.2

в пакете CLI введите: пакет добавить System.Drawing.Common --version 4.5.2

person ayman lys    schedule 04.03.2019
comment
Вот где я получил вторую ошибку. Я даже не нашел System.Drawing в Manage nuget... для решения - person Irina Gutanu; 04.03.2019
comment
Добавить: System.Drawing.Bitmap System.Drawing.BitmapData System.Drawing.Brush System.Drawing.Font System.Drawing.Graphics System.Drawing.Icon - person ayman lys; 04.03.2019

Была такая же проблема. Я клонировал решение https://github.com/barnhill/barcodelib. У него есть два проекта: проект библиотеки предназначен для .Net Standard 2.0 и относится к System.Drawings.Common. Пример проекта зависит от библиотеки и имеет ссылку на System.Drawings.Common. Пример проекта не компилировался из-за той же ошибки.

Мое решение состояло в том, чтобы просто удалить ссылку на System.Drawings.Common в пакетах nuget и прочитать ее (щелкните Пример проекта > Управление пакетами nuget > Обзор установленных, удалите пакет System.Drawings.Common, а затем добавьте его обратно), выгрузите проект а потом снова перезагрузить

Мне помогло.

person Ivan P.    schedule 08.01.2020

вместо этого вы можете попробовать использовать одну из описанных здесь библиотек https://devblogs.microsoft.com/dotnet/net-core-image-processing/

вы можете попробовать использовать https://www.nuget.org/packages/CoreCompat.System.Drawing/ и, возможно, попытаться изменить структуру вашего приложения на стандарт .net 2.0?

person mietghar    schedule 04.03.2019
comment
Я попытался установить его напрямую и добавить в проект, но он не увидит мою dll. Я использую System.Drawing только для одной строки (мне нужно получить набор данных из дизайна отчета для сравнения), и я не могу изменить все решение для своего тестового проекта. - person Irina Gutanu; 04.03.2019
comment
Вы сказали, что хотите написать несколько модульных тестов, в прошлый раз я видел проблему, когда кто-то не смог добавить ссылку на проект MS Test, поэтому ему пришлось перестроить все решение, выключать и снова включать всю Visual Studio... Но я скорее предположите, что ваша проблема связана с вашей версией фреймворка. Вы пытаетесь добавить ссылку через nuget на все ваше решение или только на ваш проект .net core 2.1? Вы можете попробовать обновить версию .net framework до совместимой со стандартом .net 2.0 docs.microsoft.com/pl-pl/dotnet/standard/net-standard - person mietghar; 04.03.2019

Это немного странно, но это сработало очень хорошо, поэтому я упомяну об этом. Я создал небольшой консольный проект 2017 года, который должен был читать базу данных оракула. Когда я начал запускать его, я получил упомянутую выше ошибку System.Drawing.Common. Это казалось глупым, потому что я вообще не занимался рисованием. В разделе «Управление пакетами Nuget» я удалил драйвер Oracle.ManagedDataAccess и добавил Oracle.ManagedDataAccess.Core, и ошибка System.Drawing.Common исчезла, и я смог прочитать свою базу данных оракула. Поэтому я предполагаю, что с NuGet вы можете получить некоторые вещи, которые вам действительно не нужны, и если у вас есть выбор для ваших пакетов NuGet, попробуйте другие. Это также может быть связано с тем, как моя организация управляла nuget для предприятия Visual Studio 2017.

person renaissanceMan    schedule 21.07.2020