Ошибка сборки "Вы не используете директиву или ссылку на сборку" - целевой фреймворк версии 4
У меня есть проект, который использует библиотеку (из Nuget)
Целевая структура для моего проекта в настоящее время 4.0
Я использую объекты и методы из библиотеки, я получаю intellisense и т.д...
Тем не менее, когда я собираю, компиляция не удается с
Тип или пространство имен не могут быть найдены. Вам не хватает директивы использования или ссылки на сборку?
Если я изменю целевую структуру проекта на 4.5, она компилируется.
Есть ли способ обойти это?
РЕДАКТИРОВАТЬ
В качестве конкретного примера, здесь приведены шаги для воспроизведения этой проблемы в одном конкретном случае.
- Файл -> Новый проект
- Новое консольное приложение
Установите Целевую платформу на 4.0
Nuget установить упаковку Paymill
Используйте один из типов в оболочке Paymill. Например:
using PaymillWrapper.Models;
using PaymillWrapper.Service;
public class MyClass
{
private readonly PaymentService _paymentService;
}
VS не жалуется.
компилировать
Ошибка получения:
Не удалось найти тип или имя пространства имен ClientService (отсутствует директива using или ссылка на сборку?)
2 ответа
Ответ заключается в выводе сборки:
2> C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (1605,5): предупреждение MSB3274: не удалось разрешить первичную ссылку "PaymillWrapper", поскольку она построена на ".NETFramework, Версия =v4.5"рамки. Это более высокая версия, чем целевая на данный момент платформа.NETFramework,Version=v4.0.
2> C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (1605,5): предупреждение MSB3268: первичная ссылка "PaymillWrapper" не может быть разрешена, поскольку она имеет косвенную зависимость от платформы сборка "System.Net.Http, версия =4.0.0.0, культура = нейтральная, PublicKeyToken=b03f5f7f11d50a3a", которая не может быть разрешена в текущей целевой среде. ".NETFramework,Version=v4.0". Чтобы решить эту проблему, удалите ссылку "PaymillWrapper" или перенастройте свое приложение на версию платформы, которая содержит "System.Net.Http, версия =4.0.0.0, Culture= нейтральный, PublicKeyToken=b03f5f7f11d50a3a".
Другими словами, пакет NuGet использует ссылку на.NET 4.5, поэтому его можно использовать только в проектах.NET 4.5+.
Возможно, вы захотите попросить авторов Paymill Wrapper узнать, могут ли они опубликовать версию, предназначенную вместо.NET 4.
Обратите внимание, что на странице пакета NuGet даже указано следующее:
зависимости
- .NETFramework 4.5
Согласно ответу Джона Скита, проблема фактически в рассматриваемой библиотеке.
Он был построен против.net 4.5
Я отправил запрос на удаление, который исправляет это.