无法卸载/重新安装NuGet包

45

我已经使用Visual Studio Express 2012设置了我的项目,添加了一些C#代码,并成功编译/部署到模拟器。某个时候我决定要使用JSON做一些事情,然后发现应该使用Json.NET框架,它是作为NuGet包提供的。我已经使用命令Install-Package Newtonsoft.Json 成功地添加了这个框架。

两天前,我尝试安装MSVC提供的更新,但安装失败,导致我无法再次打开我的项目。重新安装MSVC也没有帮助,所以我最终恢复了Windows到之前的状态。我能够再次打开我的项目,并且想要重新安装NuGet包(不知道它已经安装在项目中,而不是MSVC)。安装过程中出现错误,因此我尝试从包控制台卸载所有内容。

长话短说:

  • Nuget包控制台在Get-Package时显示“未安装任何包”
  • 再次运行Install-Package Newtonsoft.Json会给我一个错误:

    无法安装Newtonsoft.Json 5.0.6。您正在尝试在一个引用“WindowsPhone,版本=v8.0”的项目中安装此包,但该包不包含与此框架兼容的程序集

  • “管理NuGet”包对话框在“已安装”下面没有任何包,但在线包中,json包被标记为已安装(因此我无法尝试安装它)

现在我完全迷失了。我不知道如何正确地安装包,也不知道如何正确地删除它。我的项目文件是坏的吗?我该如何修复它?


[编辑] 现在变得更加混乱了。我刚刚更新了NuGet包管理器(但没有更新MSVC),并尝试重新安装Json.NET。

  • 在对话框中仍未显示在“已安装”下面
  • 在在线包列表中不再标记为已安装,但单击“安装”按钮就什么都不会发生
  • 控制台中的Get-Package显示该包已安装

PM> Get-Package

Id                             Version              Description/Release Notes                                                                                                                                                                                            
--                             -------              -------------------------                                                                                                                                                                                            
Newtonsoft.Json                5.0.6                Json.NET is a popular high-performance JSON framework for .NET
  • 试图使用`Uninstall-Package Newtonsoft.Json`进行卸载时出现“找不到软件包'Newtonsoft.Json'”

  • 在我的项目文件夹中,我可以在packages目录中看到一个名为"Newtonsoft.Json.5.0.6"的子文件夹
  • 我应该从头开始创建一个新项目吗? :/


    packages.dgml的内容:

    <?xml version="1.0" encoding="utf-8"?>
    <DirectedGraph GraphDirection="LeftToRight" xmlns="http://schemas.microsoft.com/vs/2009/dgml">
      <Nodes />
      <Links />
      <Categories>
        <Category Id="Projekt" />
        <Category Id="Paket" />
      </Categories>
      <Styles>
        <Style TargetType="Node" GroupLabel="Projekt" ValueLabel="True">
          <Condition Expression="HasCategory('Projekt')" />
          <Setter Property="Background" Value="Blue" />
        </Style>
      </Styles>
    </DirectedGraph>
    

    2
    你可以尝试打开packages.config文件并删除Newtonsoft.Json条目,这应该可以解决你的第三个问题。然后也许你就可以从NuGet包管理器窗口重新安装它了。不过你的第二个问题让我有些怀疑... - Patryk Ćwiek
    所以,你之前使用过包管理器吗?现在你安装了NuGet?你可以尝试进入包管理器并从那里卸载。(工具->库包管理器) - crthompson
    如上所述,我无法从那里卸载,因为它没有列为已安装。有趣的是:我刚刚创建了一个全新的项目,通过NuGet添加了该软件包,现在我的项目文件夹中也有一个packages.config文件,但没有Packages.dgml。 我想我只是要重新开始了。还是感谢您的帮助。 - user826955
    我更新了我的答案以反映现在NuGet中有一个卸载程序。 - crthompson
    6个回答

    62
    在您的解决方案或项目中,您会找到一个名为packages.config的文件。打开这个文件,您将看到所有NuGet安装的包。
    该文件的内容大致如下:
    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="Json" version="2.0.3" targetFramework="net45" />
    </packages>
    

    只需删除您的包行并保存文件即可。
    <?xml version="1.0" encoding="utf-8"?>
    <packages>
    </packages>
    

    然后再次运行NuGet,它应该会安装。
    JSON.NET NuGet包应该只是与Windows Phone 8.0项目兼容。在VS2012的NuGet管理器中添加它会引入JSON.NET的WP7版本。(packages\Newtonsoft.Json.4.5.10\lib\sl3-wp\Newtonsoft.Json.dll)
    JSON.NET现在也作为一个可移植类库可用,您可以从WP8中使用(可在NuGet或源代码形式中获取)。

    更新:

    NuGet的最新版本有卸载功能。

    VS 2013:

    在解决方案中,右键单击引用并管理NuGet包,您将在左上角找到"已安装的包"。选择该包,将会出现卸载选项。
    在VS 2015中:
    在解决方案中,右键点击“引用”并选择“管理 NuGet 程序包”,在右上角找到“已安装”选项卡。将鼠标悬停在程序包上,会出现“X”以进行卸载。

    VS 2017:

    在解决方案上,右键点击并选择“管理解决方案的 NuGet 包”,在左上角找到“已安装”选项卡。点击包名,在右侧面板中会出现一个“卸载”按钮。

    VS 2019:

    (与2017版本相同)在解决方案上,右键点击并选择“管理解决方案的NuGet包”,在左上角找到“已安装”选项卡。点击包名,在右侧面板中会有一个“卸载”按钮。

    VS 2022:

    (与2017年和2019年相同)在解决方案上,右键单击并选择“管理解决方案的 NuGet 包”,在左上角找到“已安装”选项卡。点击包名,在右侧面板中会出现一个“卸载”按钮。

    1
    我找不到名为packages.config的文件。资源管理器在我的项目目录中找不到此文件。你是指我项目根目录下的Packages.dgml吗?它并不包含你提到的XML内容。 - user826955
    那一定是文件。DGML通常以图形方式查看,但底层信息是XML。你能进入XML视图吗? - crthompson
    不是那个文件。 - crthompson
    1
    在 VS 2019 中,当我点击卸载按钮时,仍然会显示一个错误,表示找不到包。为什么 Visual Studio 需要安装东西来卸载它?编辑:从 packages.config 中删除条目可以完美解决该问题。 - Aaron Franke
    @AaronFranke 很高兴听到这个消息。保留所有版本在这个答案里确实很有帮助,正是因为这样的原因 :) - crthompson

    27

    我有同样的问题。即使在进行了所有package.config修改后,我也无法重新安装我的软件包。这里是对我有用的操作:

    在你的解决方案文件夹中应该有一个"packages"目录。打开这个目录并删除与你的软件包相关联的目录。

    完成。


    8
    我刚刚使用我的新Windows 10电脑四个小时,却无法在Visual Studio 2015中找到为什么没有引用,也无法恢复NuGet包。由于某种原因,TFS添加了两个包文件夹:
    位置:
    C:\Users\YourUser\Documents\Visual Studio 2015\Projects\YourProject\packages
    C:\Users\YourUser\.nuget\packages
    当这两个包文件夹都被删除后,我就可以恢复NuGet包并且一切正常运作。

    1

    确实有点令人困惑,但是如果您右键单击解决方案并选择管理nuget包,就会出现不同的选项。您应该能够从那里卸载。

    您应该在这里检查答案:Windows Phone 8 JSON,了解有关Json.net和WP8的更多信息。


    0

    在VS2017中(全新安装)我遇到了类似的问题。我正在使用一个较旧的项目,尝试安装一个相对较新的包。当我从图形界面安装包时,它会闪烁一下,然后什么都不做。

    问题是我的项目比该包具有更低的.NET目标版本。(我的解决方案针对4.5版本,而该包针对4.6版本)。在我的项目配置中将.NET目标版本更改为足够新的版本并重新构建即可解决此问题。

    可以通过运行以下命令来查看这个问题:(名称已更改)

    PM> Install-Package Package.NET
    
    Attempting to gather dependency information for package 'Package.NET.1.0.0' with respect to project 'MyProject', targeting '.NETFramework,Version=v4.5'
    Gathering dependency information took 0.19 ms
    Attempting to resolve dependencies for package 'Package.NET.1.0.0' with DependencyBehavior 'Lowest'
    Resolving dependency information took 0 ms
    Resolving actions to install package 'Package.NET.1.0.0'
    Resolved actions to install package 'Package.NET.1.0.0'
    Retrieving package 'Package.NET.1.0.0' from 'nuget.org'.
    Install failed. Rolling back...
    Package 'Package.NET.1.0.0' does not exist in project 'MyProject'
    Package 'Package.NET.1.0.0' does not exist in folder 'C:\Code\MyProject\packages'
    Executing nuget actions took 13.92 ms
    Install-Package : Could not install package 'Package.NET.1.0.0'. You are trying to install this package into a project that targets '.NETFramework,Version=v4.5', 
    but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.
    At line:1 char:1
    + Install-Package Package.NET
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [Install-Package], Exception
        + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
    

    0

    我尝试了这个解决方案,它有效了

    <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
      <PropertyGroup>
        <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
      </PropertyGroup>
      <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
    </Target>
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接