NuGet.Server 是由 .NET Foundation 提供的包,它创建一个 ASP.NET 应用程序,该应用程序可以在运行 IIS 的任何服务器上托管包源。 简单地说,NuGet.Server 通过 HTTP(S)(特别是 OData)在服务器上提供文件夹。 易于设置,最适合用于简单方案。
- 在 Visual Studio 中创建一个空的 ASP.NET Web 应用程序,并将 NuGet.Server 包添加到其中。
- 如果使用 Visual Studio 2022,则必须添加 .NET Framework 开发工具。 你需要这样才能创建新的 ASP.NET Web 应用程序 (.NET Framework) 项目。
- 在
Packages应用程序中配置文件夹并添加包。 - 将应用程序部署到合适的服务器。
以下部分详细介绍了如何使用 C# 完成此过程。
如果对 NuGet.Server 有进一步的问题,请创建一 https://github.com/nuget/NuGetGallery/issues个问题。
使用 NuGet.Server 创建和部署 ASP.NET Web 应用程序
在 Visual Studio 中,选择“ 文件 > 新建 > 项目”,搜索“ASP.NET Web 应用程序(.NET Framework)”,选择 C# 的匹配模板。
将 Framework 设置为“.NET Framework 4.6”。
为应用程序指定 NuGet.Server 以外的 合适名称,选择“确定”,然后在下一对话框中选择 “空 ”模板,然后选择“ 确定”。
右键单击该项目,选择“ 管理 NuGet 包”。
在包管理器 UI 中,选择 “浏览 ”选项卡,然后搜索并安装最新版本的 NuGet.Server 包(如果面向 .NET Framework 4.6)。 (还可以使用
Install-Package NuGet.Server.) 从包管理器控制台安装它。如果出现提示,请接受许可条款。
安装 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" />。 在这种情况下,请删除具有较旧框架版本的元素。在 Visual Studio 中本地运行站点(使用不带调试启动>或 Ctrl+F5)。 主页提供包源链接,如下所示。 如果看到错误,请仔细检查是否有
web.config重复元素,如前所述。
首次运行应用程序时,NuGet.Server 会
Packages重新构造文件夹,以包含每个包的文件夹。 这与 NuGet 3.3 引入的 本地存储布局 匹配,以提高性能。 添加更多包时,请继续遵循此结构。测试本地部署后,根据需要将应用程序部署到任何其他内部或外部站点。
部署到后
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 中的文件夹中,然后将每个文件的 生成操作 设置为 内容,并将 复制到输出目录 设为 始终复制。
发布说明
GitHub 发布页上提供了 NuGet.Server 发行说明。 这包括有关 bug 修复和添加的新功能的详细信息。
NuGet.Server 支持
如需更多有关 NuGet.Server 的帮助,请在 https://github.com/nuget/NuGetGallery/issues 提出一个问题。