Известные проблемы с NuGet

Это наиболее распространенные известные проблемы с NuGet, которые неоднократно сообщались. Если у вас возникли проблемы с установкой NuGet или управлением пакетами, ознакомьтесь с этими известными проблемами и их решениями.

Замечание

Начиная с версии NuGet 4.0, известные проблемы являются частью соответствующих замечаний о выпуске.

Параметры аудита NuGet могут не применяться правильно для проектов с помощью packages.config в Visual Studio 17.10

Добавлена поддержка аудита NuGet для проектов packages.config начиная с NuGet 6.10 и Visual Studio 17.10. Сведения о настройке аудита NuGet см. в наших документах по пакетам аудита.

Проблема:

Если два или более проекта в решении используют файл packages.config и имеют одинаковое имя, проверка NuGet выберет один из них и применит те же настройки аудита NuGet для обоих проектов.

Проблема по отслеживанию, связанная с удалением этого ограничения, доступна на GitHub.

Обходное решение:

Если все проекты с одинаковым именем используют одинаковые значения конфигурации, то при восстановлении одного проекта nuGet с помощью конфигурации другого проекта не будет никакой функциональной разницы.

NuGet.exe не имеет этого ограничения, поэтому вы можете скачать NuGet.exe и запустить NuGet.exe restore команду для вашего решения, чтобы увидеть, отличаются ли предупреждения аудита NuGet в командной строке от тех, которые сообщаются в Visual Studio.

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

Проблемы с проверкой подлинности каналов NuGet в VSTS с nuget.exe версии 3.4.3

Проблема:

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

$PAT = "Ваш личный маркер доступа" $Feed = "Ваш URL-адрес".\nuget.exe источники добавляют -Name test -Source $Feed -UserName $UserName -Password $PAT

Обходное решение:

Сохраните пароли в виде открытого текста с помощью параметра -StorePasswordInClearText .

Ошибка при установке пакетов с NuGet 3.4, 3.4.1

Проблема:

В NuGet 3.4 и 3.4.1 при использовании надстройки NuGet источники не сообщаются как доступные и не удается добавить новые источники в окне конфигурации. Результат аналогичен приведенному ниже изображению:

Конфигурация NuGet без источников

NuGet.Config файл в папке %AppData%\NuGet\ (Windows) или ~/.nuget/ (Mac/Linux) был случайно очищен. Чтобы устранить эту проблему: закройте Visual Studio (в Windows, если применимо), удалите NuGet.Config файл и повторите операцию. NuGet создал новое NuGet.Config, и вы сможете продолжить.

Ошибка при установке пакетов с NuGet 2.7

Проблема:

В NuGet 2.7 или более поздней версии при попытке установить любой пакет, содержащий ссылки на сборки, может появиться сообщение об ошибке "Входная строка не была в правильном формате". Как показано ниже:

install-package log4net
    Installing 'log4net 2.0.0'.
    Successfully installed 'log4net 2.0.0'.
    Adding 'log4net 2.0.0' to Tyson.OperatorUpload.
    Install failed. Rolling back...
    install-package : Input string was not in a correct format.
    At line:1 char:1
        install-package log4net
        ~~~~~~~~~~~~~~~~~~~~~~~
        CategoryInfo : NotSpecified: (:) [Install-Package], FormatException
        FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand

Это вызвано тем, что библиотека типов для VSLangProj.dll компонента COM не зарегистрирована в системе. Это может произойти, например, при наличии двух версий Visual Studio, установленных параллельно, а затем удалите старую версию. Это может непреднамеренно отменить регистрацию приведенной выше библиотеки COM.

Решение::

Выполните эту команду из командной строки с повышенными привилегиями , чтобы повторно зарегистрировать библиотеку типов для VSLangProj.dll

regsvr32 "C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\VsLangproj.olb"

Если команда завершается ошибкой, проверьте, существует ли файл в этом расположении.

Дополнительные сведения об этой ошибке см. в этом разделе [work item](https://nuget.codeplex.com/workitem/3609 "Work item 3609").

Сбой сборки после обновления пакета в VS 2012

Проблема: вы используете VS 2012 RTM. При обновлении пакетов NuGet вы получите это сообщение: "Не удалось удалить один или несколько пакетов" и вам будет предложено перезапустить Visual Studio. После перезапуска VS возникают странные ошибки сборки.

Причина заключается в том, что некоторые файлы в старых пакетах заблокированы фоновым процессом MSBuild. Даже после перезапуска VS фоновый процесс MSBuild по-прежнему использует файлы в старых пакетах, вызывая сбои сборки.

Исправление — установить обновление VS 2012, например VS 2012 с обновлением 2.

Обновление до последней версии NuGet из старой версии приводит к ошибке проверки подписи

Если вы используете VS 2010 с пакетом обновления 1 (SP1), при попытке обновить NuGet при установке более старой версии может возникнуть следующее сообщение об ошибке.

Установщик расширений Visual Studio

При просмотре журналов вы можете увидеть упоминание SignatureMismatchException.

Чтобы предотвратить это, можно установить исправление Visual Studio 2010 сервисного пакета 1 (SP1). Кроме того, решение заключается в том, чтобы просто удалить NuGet (при запуске Visual Studio в качестве администратора) и установить его из коллекции расширений VS. См. https://support.microsoft.com/kb/2581019 для получения дополнительной информации.

Консоль диспетчера пакетов создает исключение, когда также установлен модуль Reflector для Visual Studio.

При запуске консоли диспетчера пакетов может возникнуть следующее сообщение об ошибке исключения, если у вас установлена надстройка Reflector для VS.

The following error occurred while loading the extended type data file:
Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(2950) :
Error in type "System.Security.AccessControl.ObjectSecurity":
Exception: Cannot convert the "Microsoft.PowerShell.Commands.SecurityDescriptorCommandsBase"
value of type "System.String" to type "System.Type".
System.Management.Automation.ActionPreferenceStopException:
Command execution stopped because the preference variable "ErrorActionPreference" or common parameter
is set to Stop: Unable to find type

или

System.Management.Automation.CmdletInvocationException: Could not load file or assembly 'Scripts\nuget.psm1' or one of its dependencies. <br />The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG)) ---&gt; System.IO.FileLoadException: Could not load file or <br />assembly 'Scripts\nuget.psm1' or one of its dependencies. The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG)) <br />---&gt; System.ArgumentException: Illegal characters in path.
    at System.IO.Path.CheckInvalidPathChars(String path)
    at System.IO.Path.Combine(String path1, String path2)
    at Microsoft.VisualStudio.Platform.VsAppDomainManager.<AssemblyPaths>d__1.MoveNext()
    at Microsoft.VisualStudio.Platform.VsAppDomainManager.InnerResolveHandler(String name)
    at Microsoft.VisualStudio.Platform.VsAppDomainManager.ResolveHandler(Object sender, ResolveEventArgs args)
    at System.AppDomain.OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)
    --- End of inner exception stack trace ---
    at Microsoft.PowerShell.Commands.ModuleCmdletBase.LoadBinaryModule(Boolean trySnapInName, String moduleName, String fileName, <br />Assembly assemblyToLoad, String moduleBase, SessionState ss, String prefix, Boolean loadTypes, Boolean loadFormats, Boolean&amp; found)
    at Microsoft.PowerShell.Commands.ModuleCmdletBase.LoadModuleNamedInManifest(String moduleName, String moduleBase, <br />Boolean searchModulePath, <br />String prefix, SessionState ss, Boolean loadTypesFiles, Boolean loadFormatFiles, Boolean&amp; found)
    at Microsoft.PowerShell.Commands.ModuleCmdletBase.LoadModuleManifest(ExternalScriptInfo scriptInfo, ManifestProcessingFlags <br />manifestProcessingFlags, Version version)
    at Microsoft.PowerShell.Commands.ModuleCmdletBase.LoadModule(String fileName, String moduleBase, String prefix, SessionState ss, <br />Boolean&amp; found)
    at Microsoft.PowerShell.Commands.ImportModuleCommand.ProcessRecord()
    at System.Management.Automation.Cmdlet.DoProcessRecord()
    at System.Management.Automation.CommandProcessor.ProcessRecord()
    --- End of inner exception stack trace ---
    at System.Management.Automation.Runspaces.PipelineBase.Invoke(IEnumerable input)
    at System.Management.Automation.Runspaces.Pipeline.Invoke()
    at NuGetConsole.Host.PowerShell.Implementation.PowerShellHost.Invoke(String command, Object input, Boolean outputResults)
    at NuGetConsole.Host.PowerShell.Implementation.PowerShellHostExtensions.ImportModule(PowerShellHost host, String modulePath)
    at NuGetConsole.Host.PowerShell.Implementation.PowerShellHost.LoadStartupScripts()
    at NuGetConsole.Host.PowerShell.Implementation.PowerShellHost.Initialize()
    at NuGetConsole.Implementation.Console.ConsoleDispatcher.Start()
    at NuGetConsole.Implementation.PowerConsoleToolWindow.MoveFocus(FrameworkElement consolePane)

Мы связались с автором надстройки в надежде на разработку резолюции.

Обновление. Мы проверили, что последняя версия Отражателя, 6.5, больше не вызывает это исключение в консоли.

Сбой при открытии консоли диспетчера пакетов из-за исключения ObjectSecurity

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

The following error occurred while loading the extended type data file: Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(2977) : Error in type "System.Security.AccessControl.ObjectSecurity": Exception: The getter method should be public, non void, static, and have one parameter of type PSObject.
The following error occurred while loading the extended type data file: Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(2984) : Error in type "System.Security.AccessControl.ObjectSecurity": Exception: The getter method should be public, non void, static, and have one parameter of type PSObject.
The following error occurred while loading the extended type data file: Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(2991) : Error in type "System.Security.AccessControl.ObjectSecurity": Exception: The getter method should be public, non void, static, and have one parameter of type PSObject.
The following error occurred while loading the extended type data file: Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(2998) : Error in type "System.Security.AccessControl.ObjectSecurity": Exception: The getter method should be public, non void, static, and have one parameter of type PSObject.
The following error occurred while loading the extended type data file: Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(3005) : Error in type "System.Security.AccessControl.ObjectSecurity": Exception: The getter method should be public, non void, static, and have one parameter of type PSObject.
The term 'Get-ExecutionPolicy' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

Если да, выполните решение, описанное в StackOverflow , чтобы исправить их.

Диалоговое окно "Добавление ссылки на библиотеку пакетов" вызывает исключение, если решение содержит проект InstallShield Limited Edition

Мы определили, что если решение содержит один или несколько проектов InstallShield Limited Edition, диалоговое окно "Добавление ссылки на библиотеку пакетов " вызовет исключение при открытии. В настоящее время нет обходного решения, кроме удаления проектов InstallShield или выгрузки их.

Кнопка "Удалить", выделенная серым цветом? NuGet требует прав администратора для установки и удаления

Если вы пытаетесь удалить NuGet с помощью диспетчера расширений Visual Studio, вы можете заметить, что кнопка "Удалить" отключена. NuGet требует от администратора доступа к установке и удалению. Повторно запустите Visual Studio от имени администратора, чтобы удалить расширение. NuGet не требует доступа администратора к нему.

Консоль диспетчера пакетов завершается сбоем при её открытии в Windows XP. Что не так?

Для NuGet требуется среда выполнения PowerShell 2.0. Windows XP по умолчанию не имеет PowerShell 2.0. Среду выполнения PowerShell 2.0 можно скачать из PowerShell 2.0 Download. После установки перезапустите Visual Studio, и вы сможете открыть консоль диспетчера пакетов.

Visual Studio 2010 SP1 Beta завершает работу с ошибкой при выходе, если открыта консоль Package Manager.

Если вы установили Visual Studio 2010 с бета-версией пакета обновления 1 (SP1), вы можете заметить, что если оставите консоль диспетчера пакетов открытой и закроете Visual Studio, она завершится сбоем. Эта известная проблема Visual Studio и будет исправлена в выпуске RTM с пакетом обновления 1 (SP1). Пока просто игнорируйте сбой или удалите Beta версии SP1, если это возможно.

Элемент "метаданные" ... имеет исключение недопустимого дочернего элемента

Если вы установили пакеты, созданные с предварительной версией NuGet, может возникнуть сообщение об ошибке с сообщением "Элемент "метаданные" в пространстве имен "schemas.microsoft.com/packaging/2010/07/nuspec.xsd" имеет недопустимый дочерний элемент при запуске версии NUGet RTM с этим проектом. Необходимо удалить и повторно установить каждый пакет с помощью rtM-версии NuGet.

Попытка установить или удалить приводит к ошибке "Не удается создать файл, если этот файл уже существует".

По какой-то причине расширения Visual Studio могут получить странное состояние, в котором вы удалили расширение VSIX, но некоторые файлы остались позади. Чтобы обойти эту проблему, выполните указанные ниже действия.

  1. Выход из Visual Studio

  2. Откройте следующую папку (она может находиться на другом диске на компьютере)

    C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft Corporation\NuGet Package Manager<version>\

  3. Удалите все файлы с расширениями DELETEME .

  4. Повторное открытие Visual Studio

После выполнения этих действий вы сможете продолжить работу.

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

Вы можете получить следующую ошибку, если установите FluentNHibernate с помощью консоли диспетчера пакетов, а затем скомпилируете проект с включенным "Анализом кода".

Error 3 CA0058 : The referenced assembly
'NHibernate, Version=3.0.0.2001, Culture=neutral, PublicKeyToken=aa95f207798dfdb4'
could not be found. This assembly is required for analysis and was referenced by:
C:\temp\Scratch\src\MyProject.UnitTests\bin\Debug\MyProject.UnitTests.dll.
MyProject.UnitTests

По умолчанию FluentNHibernate требует NHibernate 3.0.0.2001. Однако по замыслу, NuGet установит NHibernate 3.0.0.4000 в ваш проект и добавит соответствующие перенаправления привязки, чтобы он работал. Ваш проект будет нормально компилироваться, если анализ кода не включен. В отличие от компилятора, средство анализа кода недостаточно точно следует перенаправлениям привязки, из-за чего используется версия 3.0.0.4000 вместо 3.0.0.2001. Чтобы обойти проблему, установите NHibernate 3.0.0.2001 или настройте средство анализа кода так, чтобы оно работало как компилятор, следуя этим инструкциям:

  1. Перейдите к%PROGRAMFILES%\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop
  2. Откройте FxCopCmd.exe.config и измените AssemblyReferenceResolveMode с StrongName на StrongNameIgnoringVersion.
  3. Сохраните изменения и перестройте проект.

команда Write-Error не работает внутри install.ps1/uninstall.ps1/init.ps1

Это известная проблема. Вместо вызова метода Write-Error попробуйте использовать throw.

throw "My error message"

Установка NuGet с ограниченным доступом в Windows 2003 может завершить работу Visual Studio

При попытке установить NuGet с помощью диспетчера расширений Visual Studio без запуска от имени администратора, появляется диалоговое окно "Запуск от имени" с установленным по умолчанию флажком "Запустить эту программу с ограниченным доступом".

Диалоговое окно

Нажатие кнопки "ОК" при установленной опции приводит к сбою Visual Studio. Перед установкой NuGet обязательно снимите этот флажок.

Не удается удалить NuGet для инструментов Windows Phone

Средства Windows Phone не поддерживают диспетчер расширений Visual Studio. Чтобы удалить NuGet, выполните следующую команду.

vsixinstaller.exe /uninstall:NuPackToolsVsix.Microsoft.67e54e40-0ae3-42c5-a949-fddf5739e7a5

Изменение заглавной буквы идентификаторов пакетов NuGet прерывает восстановление пакета

Как подробно обсуждалось в этой задаче на GitHub, изменение регистра имен пакетов NuGet может выполняться службой поддержки NuGet, но это вызывает осложнения во время восстановления пакетов для пользователей, у которых в папке global-packages уже имеются пакеты с разными вариантами регистра. Мы рекомендуем только запросить изменение регистра, если у вас есть способ взаимодействовать с существующими пользователями пакета о разрыве, который может произойти при восстановлении пакета во время сборки.

Создание отчетов о проблемах

Чтобы сообщить о проблемах NuGet, посетите сайт https://github.com/nuget/home/issues.