NuGet.Server

NuGet.Server 是由 .NET Foundation 提供的包,它创建一个 ASP.NET 应用程序,该应用程序可以在运行 IIS 的任何服务器上托管包源。 简单地说,NuGet.Server 通过 HTTP(S)(特别是 OData)在服务器上提供文件夹。 易于设置,最适合用于简单方案。

  1. 在 Visual Studio 中创建一个空的 ASP.NET Web 应用程序,并将 NuGet.Server 包添加到其中。
    • 如果使用 Visual Studio 2022,则必须添加 .NET Framework 开发工具。 你需要这样才能创建新的 ASP.NET Web 应用程序 (.NET Framework) 项目。
  2. Packages 应用程序中配置文件夹并添加包。
  3. 将应用程序部署到合适的服务器。

以下部分详细介绍了如何使用 C# 完成此过程。

如果对 NuGet.Server 有进一步的问题,请创建一 https://github.com/nuget/NuGetGallery/issues个问题。

使用 NuGet.Server 创建和部署 ASP.NET Web 应用程序

  1. 在 Visual Studio 中,选择“ 文件 > 新建 > 项目”,搜索“ASP.NET Web 应用程序(.NET Framework)”,选择 C# 的匹配模板。

    选择 .NET Framework Web 项目模板

  2. Framework 设置为“.NET Framework 4.6”。

    设置新项目的目标框架

  3. 为应用程序指定 NuGet.Server 以外的 合适名称,选择“确定”,然后在下一对话框中选择 “空 ”模板,然后选择“ 确定”。

    选择空 Web 项目

  4. 右键单击该项目,选择“ 管理 NuGet 包”。

  5. 在包管理器 UI 中,选择 “浏览 ”选项卡,然后搜索并安装最新版本的 NuGet.Server 包(如果面向 .NET Framework 4.6)。 (还可以使用 Install-Package NuGet.Server.) 从包管理器控制台安装它。如果出现提示,请接受许可条款。

    安装 NuGet.Server 包

  6. 安装 NuGet.Server 会将空的 Web 应用程序转换为包源。 它安装各种其他包,在应用程序中创建一个 Packages 文件夹,并修改 web.config 以包含其他设置(有关详细信息,请参阅该文件中的注释)。

    重要

    在 NuGet.Server 包完成对该文件的修改后仔细检查 web.config 。 NuGet.Server 可能不会覆盖现有元素,而是创建重复的元素。 稍后尝试运行项目时,这些重复项将导致“内部服务器错误”。 例如,如果在安装 NuGet.Server 之前 web.config 包含 <compilation debug="true" targetFramework="4.5.2" /> ,则该包不会覆盖它,而是插入第二个 <compilation debug="true" targetFramework="4.6" />。 在这种情况下,请删除具有较旧框架版本的元素。

  7. 在 Visual Studio 中本地运行站点(使用不带调试启动>或 Ctrl+F5)。 主页提供包源链接,如下所示。 如果看到错误,请仔细检查是否有 web.config 重复元素,如前所述。

    使用 NuGet.Server 的应用程序的默认主页

  8. 首次运行应用程序时,NuGet.Server 会 Packages 重新构造文件夹,以包含每个包的文件夹。 这与 NuGet 3.3 引入的 本地存储布局 匹配,以提高性能。 添加更多包时,请继续遵循此结构。

  9. 测试本地部署后,根据需要将应用程序部署到任何其他内部或外部站点。

  10. 部署到后 http://<domain>,用于包源的 URL 将是 http://<domain>/nuget

在外部将包添加到源

运行 NuGet.Server 站点后,可以使用 nuget 推送 添加包,前提是在其中设置了 API 密钥值 web.config

安装 NuGet.Server 包后, web.config 包含空 appSetting/apiKey 值:

<appSettings>
    <add key="apiKey" value="" />
</appSettings>

如果 apiKey 省略或为空,则会禁用将包推送到源。

若要启用此功能,请将 apiKey 设置为一个值(理想情况下为强密码),并添加一个名为 appSettings/requireApiKey 的键,值为 true

<appSettings>
    <!-- Sets whether an API Key is required to push/delete packages -->
    <add key="requireApiKey" value="true" />

    <!-- Set a shared password (for all users) to push/delete packages -->
    <add key="apiKey" value="" />
</appSettings>

如果服务器已受到保护,或者你不需要 API 密钥(例如,在本地团队网络上使用专用服务器时),则可以设置为 requireApiKeyfalse。 然后,有权访问服务器的所有用户都可以推送包。

从 NuGet.Server 3.0.0 开始,推送包的 URL 更改为 http://<domain>/nuget。 在 3.0.0 版本之前,推送 URL 为 http://<domain>/api/v2/package

NuGet 3.2.1 及更高版本中,通过在启动配置(默认情况下的 enableLegacyPushRoute: true 选项)中启用此旧版 URL /api/v2/package,以及默认启用 /nuget。 请注意,当多个信息流托管在同一项目中时,此功能不起作用。

从源中删除包

使用 NuGet.Server,nuget delete 命令会从存储库中删除一个包,前提是其中包含带有注释的 API 密钥。

如果要更改将包移除出列表的行为(使其仍可用于恢复包),请将 enableDelisting 密钥 web.config 更改为 true。

配置包文件夹

使用 NuGet.Server 1.5 及更高版本,可以在 web.config中通过 appSettings/packagesPath 值来自定义包文件夹。

<appSettings>
    <!-- Set the value here to specify your custom packages folder. -->
    <add key="packagesPath" value="C:\MyPackages" />
</appSettings>

packagesPath 可以是绝对路径或虚拟路径。

如果 packagesPath 省略或留空,则包文件夹为默认值 ~/Packages

发布 Web 应用时使包可用

若要在将应用程序发布到服务器时让包在feed中可用,请将每个 .nupkg 文件添加到 Packages Visual Studio 中的文件夹中,然后将每个文件的 生成操作 设置为 内容,并将 复制到输出目录 设为 始终复制

将包复制到项目中的 Packages 文件夹

发布说明

GitHub 发布页上提供了 NuGet.Server 发行说明。 这包括有关 bug 修复和添加的新功能的详细信息。

NuGet.Server 支持

如需更多有关 NuGet.Server 的帮助,请在 https://github.com/nuget/NuGetGallery/issues 提出一个问题。