Ошибка установки пакета Nuget

При попытке установить пакет из нашего недавно созданного частного канала Nuget, я получаю следующую ошибку.

Не удалось установить пакет 'GC.Timecode 1.0.0.3'. Вы пытаетесь установить этот пакет в проект, который нацелен на ".NETFramework, Version = v4.5.1", но пакет не содержит никаких ссылок на сборки или файлов содержимого, совместимых с этой платформой.

Пакет Nuget также предназначен для 4.5.1. (Снимок экрана взят из Nuget Package Explorer)

Пакет Nuget создается Octopack через локальную TFS, а затем публикуется на частном сервере Proget

enter image description here

Nuspec файл выглядит так

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>GC.Timecode</id>
<version>1.0.0.3</version>
<authors>user</authors>
<owners>user</owners>
<licenseUrl>http://example.com</licenseUrl>
<projectUrl>http://example.com</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>The GC.Timecode deployment package, built on 25/01/2016</description>
<releaseNotes />
</metadata>
</package>

Содержание пакета

enter image description here

Что здесь происходит?

Ответ 1

Проблема заключалась в том, что Octopack по умолчанию будет просто реплицировать существующую структуру папок, тогда как Nuget упакует вашу dll в папку lib.

Для лени, вы можете использовать этот пакет, чтобы получить пакет nuget, построенный для каждой сборки

https://www.nuget.org/packages/CreateNewNuGetPackageFromProjectAfterEachBuild/

Ответ 2

Скользкий Пит исправил эту проблему для меня.

В первый раз, когда я попытался установить свою сборку, я получил:

Не удалось установить пакет "Имя пакета". Вы пытаетесь установить этот > пакет в проект, целью которого является ".NETFramework, Version = v4.6.1", но пакет > не содержит ссылок на сборки или файлов содержимого, совместимых с этой инфраструктурой. Для получения дополнительной информации обратитесь в пакет > автор.

После того, как моя сборка в пакете Nuget была в папке "lib\net45", я все еще получил ошибку!

Однако после перехода к Tools- > Options- > Nuget- > General и очистки кеша проблема была решена.

Ответ 3

Убедитесь, что ваш файл nuspec содержит цель 'lib/net45'

<package>
  <metadata>
    ...
  </metadata>
  <files>
    <file src="bin\Release\*.*" target="lib/net45" />
  </files>
</package>

Ответ 4

Это случилось со мной, и я не нашел решение, отправленное на любой из этих сайтов, поэтому, надеюсь, это поможет кому-то другому.

Сообщение, которое я получал, было:

Не удалось установить пакет "Имя пакета". Вы пытаетесь установить этот пакет в проект, который нацелен '.NETFramework, Version = v4.6.1', но пакет не содержит никаких ссылки на сборку или файлы содержимого, которые совместимы с этим фреймворк. Для получения дополнительной информации обратитесь к автору пакета.

У меня был пакет Nuget, который был построен для всех версий 4.x, поэтому не имеет значения, что он конкретно не указал версию 4.6.1. Я попытался изменить сборку библиотеки классов на 4.0, 4.5, 4.5.2, 4.6, 4.6.1 и 4.6.2, но ничего не исправляло эту проблему. Я также добавил несколько версий DLL к пакету в отдельных папках /lib/Net 4 (5,51,52,6,61,62), и ошибка все еще была там.

В конце концов, я узнал, что причиной моей проблемы был первоначальный частный пакет Nuget, который я создал, был "плохим" пакетом, и этот плохой пакет был кэширован на моем локальном компьютере.

Я исправил проблему с пакетом и переместил новый пакет на наш Nuget-сервер (оставив имя версии одинаковым), но Nuget внутри Visual Studio не сбрасывал новый пакет, а вместо этого ссылался на плохой пакет, кэшированный на моей локальной машине в. Менеджер пакетов показал, что пакет был обновлен и правильно отображен на нашем сервере Nuget, но он никогда не получал новый пакет. Он всегда извлекал кешированный пакет по адресу:

C:\Users\your_user_account \.Nuget\пакеты\

Просто удалив соответствующий пакет под вашей локальной учетной записью принудительного диспетчера пакетов, вытащите новый пакет с сервера.

Ответ 5

Если вы используете nuspec, убедитесь, что все установленные пакеты помечены как "зависимости" в метаданных.

<dependencies>
      <dependency id="MyIncludedPackage" version="1.13.0" />
    </dependencies>
  </metadata>

Добавление всех пакетов решило эту проблему для меня.

Ответ 6

Я также получил следующее сообщение.

Не удалось установить пакет "Имя пакета". Вы пытаетесь установить этот пакет в проект, который нацелен на ".NETFramework, Version = v4.6.1", но пакет не содержит никаких ссылок на сборки или файлов содержимого, совместимых с этой платформой. Для получения дополнительной информации свяжитесь с автором пакета.

В моем случае, изменение формата управления пакетами с packages.config на PackageReference решило проблему.

Ответ 7

Еще одна возможность, над которой я только что работал, заключалась в том, что локальные инструменты Nuget могут быть слишком старыми.

Я пытался установить https://github.com/alastairtree/LazyCache, который является проектом стандарта .Net 2.0. Мой локальный проект был .NET Framework 4.7.2, который совместим. И все же я получил ошибку, процитированную в вопросе.

Проблема заключалась в том, что моя установка Nuget на VS2015 была не последней. Хотя в разделе "Инструменты"> "Расширения" он НЕ отображал доступных обновлений, на самом деле в https://www.nuget.org/downloads был доступен гораздо более новый Nuget (я думаю, 3,6х против 3,4х).

Я установил это, и проблема была решена. Видимо, старый Nuget не понимал, что такое .NET Standard.