如何在本地安装 NuGet 包 .nupkg 文件?

Posted

技术标签:

【中文标题】如何在本地安装 NuGet 包 .nupkg 文件?【英文标题】:How do I install a NuGet package .nupkg file locally? 【发布时间】:2012-05-01 16:09:16 【问题描述】:

我有一些来自 C# 书籍的 .nupkg 文件。如何安装它们?

【问题讨论】:

【参考方案1】:

菜单工具选项包管理器

提供名称和文件夹位置。单击确定。将 NuGet 包文件放到该文件夹​​中。

在解决方案资源管理器中转到您的项目,右键单击并选择“管理 NuGet 包”。选择新的包源。

这里是documentation。

【讨论】:

其实步骤1我已经做过几次了。但是当我打开查看已安装的包、更新或最近的包时,我的包没有出现在第 2 步中。 在我的屏幕上,我在“已安装的包”下只有“全部”,而不是“NuGet 官方包源”,也不是我的自定义“newNuget”,它们不见了。 我用的是vs2010。刚刚尝试从他们的主页下载并安装最新的 nuget。下载点击下一步下一步...然后错误... M$ 如预期的那样,有一个已知问题的链接,检查,说签名不匹配然后我需要卸载现有的nuget,这很容易修复。好吧,就这样吧。当我重新启动计算机并再次安装时,同样的错误又回来了,签名不匹配......所以现在我被旧版本卡住了,新版本不想安装。 问题已修复。我从 Windows -> 控制面板卸载了 nuget。它没有那样工作。我需要启动 VS 并进入 Tools->Extension Manager ...然后从那里点击卸载 nuget。重新启动VS。然后再次安装nuget,它工作。现在,本地 nupkg 文件也出现了(编辑:它们在“在线”选项卡中,而不是“已安装”选项卡中,我发布的图片中的错误)。感谢您的帮助:) 我还没有足够的声誉来发表评论 - 但要在已接受的答案中回答迈克尔关于 VS2015 仍想上网的问题。我遇到了同样的问题,但是在选项中,如果您取消勾选所有在线资源,它适用于离线资源。 nuget Options pic【参考方案2】:

您还可以使用Package Manager Console 并通过在-Source 参数中指定包含包文件的目录的路径来调用Install-Package cmdlet:

Install-Package SomePackage -Source C:\PathToThePackageDir\

【讨论】:

我也可以用命令行工具做类似的事情吗? 是的。 -Source 选项在 nuget.exe 中也可用。例如:nuget install SomePackage -Source C:\PathToThePackageDir 您可能还需要指定 -IncludePrerelease 标志。否则,如果包版本有破折号后缀(例如“-beta1”),Install-Package 将找不到它。 这是一个比公认的答案更直接的答案。感谢您的信息! 不适用于 VS 2017,请参阅 f.ex。由@Granger 回答。【参考方案3】:

对于我喜欢使用的 .nupkg 文件:

Install-Package C:\Path\To\Some\File.nupkg

【讨论】:

同意。值得一提的是,只有绝对路径有效 不适用于 VS 2017,请参阅 f.ex。由@Granger 回答。 @RenniePet 在 VS2017 中为我工作(但我已经将我的 .nupkg 放在存储所有其他包的同一目录下) 它不适合我,我使用的是 VS2013 版本 12.0.21..5 和 Nuget 包管理器 2.12.0.817 :( 我无法让它与 nuget.exe cli 工具一起使用。它尝试使用 nuget 配置中的提要查找包(GET nuget.COMPANY.nl/nuget/NuGet/… Files (x86)...)【参考方案4】:

适用于 Visual Studio 2017 及其新的 .csproj 格式

您不能再仅使用 Install-Package 来指向本地文件。 (这可能是因为 PackageReference 元素不支持文件路径;它只允许您指定包的 Id。)

您首先必须告诉 Visual Studio 您的包的位置,然后才能将其添加到项目中。大多数人所做的是进入 NuGet 包管理器并将本地文件夹添加为源(菜单 ToolsOptionsNuGet 包管理器包来源)。但这意味着您的依赖项的位置不会与您的代码库的其余部分一起提交(版本控制)。

使用相对路径的本地 NuGet 包

这将添加一个仅适用于特定解决方案的包源,您可以使用相对路径。

您需要在与您的.sln 文件相同的目录中创建一个nuget.config 文件。使用所需的包源配置文件。当您下次在 Visual Studio 2017 中打开解决方案时,这些源文件夹中的任何 .nupkg 文件都将可用。 (您会在包管理器中看到列出的源代码,当您管理项目的包时,您会在“浏览”选项卡上找到这些包。)

这里有一个示例 nuget.config 可以帮助您入门:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <add key="MyLocalSharedSource" value="..\..\..\some\folder" />
    </packageSources>
</configuration>

背景故事

我使用此功能的用例是我的机器上有一个代码存储库的多个实例。代码库中有一个共享库,它作为 .nupkg 文件发布/部署。这种方法允许我们代码库中的各种依赖解决方案在同一个存储库实例中使用包。此外,全新安装 Visual Studio 2017 的人可以在任意位置签出代码,相关解决方案将成功恢复和构建。

【讨论】:

我正在使用 VS 2017 并没有遇到这个问题。我刚刚将-Source 参数传递给Update-Package,它工作正常。可能与Install-Package 命令有关? 只是想指出,这在 VS 2019 上效果很好,在 DevOps 管道中也同样出色。必须这样做才能在我们使用 CI/CD 构建和部署的解决方案中使用 FastReports。但是,nuget.config 还必须具有官方 repo URL,并使用 Nuget 还原任务,而不是 DotNetCLI 还原,因为这会创建 nuget.config 的副本,因此您的相对路径不再有效。【参考方案5】:
    将文件添加到解决方案旁边的名为 LocalPackages 的文件夹中(不必如此调用,但在后续步骤中相应地调整 xml)

    在您的解决方案文件旁边创建一个名为 NuGet.config 的文件,其中包含以下内容

    <?xml version="1.0" encoding="utf-8"?>
      <configuration>
        <packageSources>
          <add key="LocalPackages" value="./LocalPackages" />
        </packageSources>
        <activePackageSource>
          <!-- this tells that all of them are active -->
          <add key="All" value="(Aggregate source)" />
        </activePackageSource>
     </configuration>
    

    如果解决方案在 Visual Studio 中打开,请将其关闭,然后重新打开。

现在您的包应该出现在浏览器中,或者可以使用 Install-Package 进行安装

【讨论】:

这可能只是因为我有一个与 Nuget 存储库同名的包,但在运行 Install-Package 之前我需要使用包管理器控制台并选择包源为 LocalPackages。 【参考方案6】:

如果您有一个 .nupkg 文件并且只需要 .dll 文件,您只需将扩展名更改为 .zip 并找到 lib 目录。

【讨论】:

如果将其视为 zip 文件,则文件名中有空格的文件将用 % 提取(替换空格)。为避免使用 NuGet 进行此安装。 实际上,您甚至不需要重命名扩展名。只需右键该文件,然后选择打开方式,找到可以打开.zip文件的应用程序,即可打开.nupkg文件,然后就可以将需要的dll文件解压到您指定的文件夹中了。跨度> 我需要的最佳解决方案【参考方案7】:

只是为了提供更新,Visual Studio 2015 用户有一些细微的变化。

要手动使用或安装包,请转到工具 -> 选项 -> NuGet包管理器 -> 包源

点击添加按钮,选择源,不要忘记点击“更新”,因为它会更新你的包的文件夹位置,编辑你想要的包源的名称,如果你想要:

要选择您添加的包,请右键单击您的解决方案并选择“管理 Nuget 包

下拉列表在右侧,然后选择浏览以浏览您在文件夹源中指定的包。如果该文件夹源上没有 nuget 包,这将为空:

【讨论】:

【参考方案8】:

在 Linux 上,使用 NuGet CLI,命令类似。要安装 my.nupkg,请运行

nuget add -Source some/directory my.nupkg

然后从那个目录运行dotnet restore

dotnet restore --source some/directory Project.sln

或将该目录添加为 NuGet 源

nuget sources Add -Name MySource -Source some/directory

然后告诉msbuild 将该目录与/p:RestoreAdditionalSources=MySource/p:RestoreSources=MySource 一起使用。第二个开关将禁用所有其他来源,例如,这对于离线场景很有用。

【讨论】:

在 mac 上(我也假设是 Linux),如果您使用 dotnet restore(或 VS Mac),则不能依赖 nuget sources,因为 this 错误。我不得不手动将本地源添加到~/.nuget/NuGet/NuGet.Config(参见这个GH issue)。【参考方案9】:

最近我想安装squirrel.windows,我从https://www.nuget.org/packages/squirrel.windows/ 尝试了Install-Package squirrel.windows -Version 2.0.1,但它失败并出现一些错误。于是我下载了squirrel.windows.2.0.1.nupkg并保存在D:\Downloads\,然后我可以在powershell中通过Install-Package squirrel.windows -verbose -Source D:\Downloads\ -Scope CurrentUser -SkipDependencies安装成功。

【讨论】:

【参考方案10】:
    使用以下 3 个选项之一打包您的库:
Visual Studio(csproj > Properties > Package > 勾选“Generate NuGet Package on Build”。然后构建解决方案) dotnet CLI(在项目文件夹的命令提示符中:dotnet build,然后是dotnet pack 命令) NuGet CLI(在项目文件夹的命令提示符中:dotnet build,然后是nuget pack 命令)
    使用nuget add 命令将生成的包(在项目文件夹 bin > Debug (or Release) > *.nupkg 文件中)添加到离线提要(VS2019 中的默认位置是 C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\) 在 VS 中,管理 NuGet 包 > 右上角:将包源更改为 Microsoft Visual Studio Online Packages

详细说明可以在here或yt上找到

【讨论】:

以上是关于如何在本地安装 NuGet 包 .nupkg 文件?的主要内容,如果未能解决你的问题,请参考以下文章

nuget服务器搭建,以及如何发布一个Nuget包

VS NuGet加载本地程序包

如何打开.nupkg文件

将 pdb 文件包含到我的 nuget (nupkg) 文件中

window系统下搭建本地的NuGet Server

使用visual studio pack在nuget包中包含构建目录