在VS2012中将NuGet包添加为项目引用的最佳方法是什么?

64

好的。很快的问题,我可能只是太蠢了。

如果你在项目的“引用”文件夹上右键单击,然后选择“管理 NuGet 包”,你就可以安装包,并且它们会自动被点击的项目所引用。但是,我想将同样的引用添加到同一解决方案中的其他项目中。如果你重复之前的步骤,但是点击另一个项目,唯一的选项就是卸载该包(因为它已经安装了),那么将现有(已安装)的 NuGet 包添加为项目引用的正确方法是什么?我是否应该使用常规对话框添加引用并“浏览”到包文件夹中的 dll?对于后续的引用,是否要使用一种方法来添加第一个引用,另一种方法来添加其他引用?那似乎不对。

4个回答

87
您可以通过以下方式使用“管理解决方案的NuGet包...”:
  • 右键单击解决方案
  • 工具 > 库程序包管理器 > 管理解决方案的NuGet包
然后,您可以选择在哪些项目中安装包,如下面的截图所示: enter image description here 此外,您还可以使用相同的“管理解决方案的NuGet包...”将已安装的包添加到其他解决方案中的项目中。 enter image description here

因此,要安装/删除系统中的软件包,您可以使用项目级上下文菜单,要添加/删除项目的引用,则使用解决方案级别的上下文菜单。好的,谢谢您的回答。您有任何想法是什么原因导致在“选择项目”对话框中选中一个项目?我有一个已经选中但没有对该软件包的引用的项目,当我取消选中它时,它会再次出现。 - Russell Horwood

21

这里的另一个答案没有帮到我。以下是我所做的事情,我不知道其他方法。我正在使用 VS 2013。

  • 我在包管理器控制台中安装了包,例如: PM> Install-Package Newtonsoft.Json
  • 在解决方案资源管理器中,右键单击“引用”,选择“添加引用”
  • 点击“浏览”,并导航到位于解决方案文件夹下的packages目录中的dll文件。

这将为项目添加一个相对路径的引用,因此它应该可以与从源代码控制获取代码并将其放入不同目录中的其他人一起使用。


5
这种方法存在一个问题:如果将来需要更新此软件包,Nuget 不会自动在您的项目中处理。结果是,您最终会得到不同项目引用相同软件包的不同版本。这将导致运行时异常。因此最好通过 Nuget 软件包管理器添加引用,而不是手动添加。 - steavy

3
我遇到了同样的问题。kristianp发布的解决方案已经奏效,但是处理大量包时可能有些繁琐。对我而言行之有效的解决方法就是在记事本中编辑myProjectName.csproj文件,并像下面这样从另一个项目中复制粘贴引用内容:
...

<ItemGroup>
    <Reference Include="Microsoft.AspNet.SignalR.Core">
      <HintPath>..\packages\Microsoft.AspNet.SignalR.Core.2.1.2\lib\net45\Microsoft.AspNet.SignalR.Core.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.AspNet.SignalR.SystemWeb">
      <HintPath>..\packages\Microsoft.AspNet.SignalR.SystemWeb.2.1.2\lib\net45\Microsoft.AspNet.SignalR.SystemWeb.dll</HintPath>
    </Reference>

    ...

希望这能帮到有需要的人。这让我省了很多麻烦。


2

现在我使用程序包管理器控制台(查看->其他窗口->程序包管理器控制台)。

很可能你只需要以下两个命令:

install-package <package-name> [-version <version-number>] [-project <project-name]

并且

update-package <package-name> [-reinstall] [-version <version-number>] [-project <project-name>]

where

  • 方括号 [ ] 中的部分是可选的。
  • 'install-package' 将安装到指定的项目,如果未指定,则安装到命令窗口顶部的 'Default Project' 下拉列表中选择的项目。
  • 'update-package' 将应用更改到每个项目,除非指定了项目。
  • '-reinstall' 表示卸载然后再次以相同的版本号安装包。

起初我认为这些命令的行为有点奇怪,但通过经验,我发现它们最有用的方式就是这样。尽管个人认为我会完全放弃 'Default Project' 下拉列表。


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