搭建NuGet服务器
NuGet.Server是由.NET Foundation提供的一个包,用于创建一个ASP.NET应用程序,该应用程序可以在任何运行IIS的服务器上。简单地说,NuGet.Server在服务器上创建一个文件夹,并可以通过HTTP(S)获取内容。设置起来很简单,适用于简单的场景。
- 在Visual Studio中创建一个空的ASP.NET Web应用程序,并将NuGet.Server包添加到它。
- 配置应用程序中的Packages文件夹并添加软件包。
- 将应用程序部署到合适的服务器。
以下为创建ASP.NET Web应用程序的详细步骤。
使用NuGet.Server创建和部署ASP.NET Web应用程序
-
在Visual Studio中,选择File> New> Project,搜索“ASP.NET”,为C#选择ASP.NET Web应用程序(.NET Framework)模板,并将Framework设置为“.NET Framework 4.6”:
-
为应用程序提供除NuGet.Server以外的合适名称,比如上图的MyServer,选择OK,然后在下一个对话框中选择空模板,然后选择确定。
-
右键单击该项目,选择管理NuGet包。
-
在Package Manager UI中,选择Browse选项卡,然后搜索并安装最新版本的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" />
,则NuGet.Server包不会覆盖它,而是会插入第二个<compilation debug="true" targetFramework="4.6" />
。在这种情况下,请删除具有较旧框架版本的元素。 -
要将应用程序发布到服务器时在源中提供包,请在Visual Studio中将每个
.nupkg
文件添加到Packages
的文件夹中,然后将每个文件的“ 生成操作”设置为“ 内容”并将“ 复制到输出目录”设置为“始终复制(右键>属性): -
在Visual Studio中本地运行站点(F5)。主页提供了NuGet服务器网址,如下所示。如果您看到错误,请仔细检查您
web.config
的重复元素是否在前面的步骤5中提到。 -
点击上图圈出来的here可以看到关于包的信息。
-
第一次运行应用程序时,NuGet.Server重新构建
Packages
文件夹以包含每个软件包的文件夹。这与NuGet 3.3引入的本地存储布局相匹配,目的是提高性能。添加更多软件包时,请继续遵循此结构,如上图。 -
本地测试通过后,根据需要将应用程序部署到其他内部或外部站点。
-
一旦部署到
http://<domain>
,您用于软件包源的URL将会是http://<domain>/nuget
。
配置Packages文件夹
在NuGet.Server
1.5及更高版本中,您可以在web.config文件中,修改appSetting/packagesPath的
值自定义包文件夹路径:
<appSettings>
<!-- Set the value here to specify your custom packages folder. -->
<add key="packagesPath" value="C:\MyPackages" />
</appSettings>
packagesPath
可以是绝对路径或虚拟路径。
当packagesPath
省略或保留为空时,packages文件夹是默认值~/Packages
。
从外部向包服务器添加包
一旦NuGet.Server站点运行,您可以使用nuget push 添加软件包,只要您在web.config中设置API密钥值。
安装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密钥(例如,在本地团队网络上使用私有服务器时),则可以设置requireApiKey
为false
。所有有权访问服务器的用户都可以往此包服务器推送软件包。
从包服务器中移除包裹
使用NuGet.Server时,nuget delete命令会从存储库中删除一个包,只要您将API密钥包含在注释中即可。
如果您想要改变行为来取消包(将其保留为包恢复),请将web.config中的enableDelisting键更改为true。