Ошибка сборки "Вы не используете директиву или ссылку на сборку" - целевой фреймворк версии 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

Я отправил запрос на удаление, который исправляет это.

Другие вопросы по тегам