42

我已经使用 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,Version=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>
4

6 回答 6

56

在您的解决方案或项目中,您将找到一个名为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 管理器中添加它会引入 WP7 版本的 JSON.NET。(包\Newtonsoft.Json.4.5.10\lib\sl3-wp\Newtonsoft.Json.dll)

JSON.NET 现在也可用作可移植类库,您可以从 WP8 使用它(以 NuGet 或源形式提供)。

更新:

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

与 2013 年相比:

在解决方案中,右键单击“引用”和“管理 NuGet 包”,您将在左上角找到“已安装的包”。选择包,卸载选项将可用。

与 2015 年相比:

在解决方案中,右键单击“引用”和“管理 NuGet 包”,找到右上角的“已安装”选项卡。将鼠标悬停在包上,“X”将出现卸载。

与 2017 年相比:

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

与 2019 年相比:

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

于 2013-09-05T07:38:44.407 回答
26

我有同样的问题。即使在所有 package.config 修改之后,我也无法重新安装我的包。这对我有用。

在您的解决方案文件夹中应该有一个“包”目录。打开此目录并删除与您的包关联的目录。

完毕。

于 2014-02-20T16:26:03.240 回答
8

刚在我的新 Windows 10 机器上坐了四个小时,却不明白为什么在 Visual Studio 2015 中没有引用工作以及为什么我无法恢复 NuGet 包。出于某种原因,TFS 添加了两个包文件夹:

地点:

C:\Users\YourUser\Documents\Visual Studio 2015\Projects\YourProject\packages

C:\Users\YourUser\.nuget\packages

当两个包文件夹都被删除时,我可以恢复 NuGet 包,一切都恢复正常了。

于 2015-10-19T12:10:45.003 回答
1

这确实有点令人困惑,但是如果您右键单击解决方案并选择管理 nuget 包,则可以使用不同的选项。您应该可以从那里卸载。

您应该在此处查看答案:Windows Phone 8 JSON,以获取有关 Json.net 和 WP8 的更多信息。

于 2013-09-05T07:39:27.293 回答
0

我在 VS2017(全新安装)中遇到了类似的问题。我正在处理一个较旧的项目,试图安装一个相对较新的包。当我从 GUI 安装软件包时,它闪烁了一秒钟,然后什么也没做。

问题是我的项目的 .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
于 2017-07-14T05:07:58.670 回答
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>
于 2017-02-09T11:25:27.113 回答