Ошибка установки пакета 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.