搭建NuGet服务器

NuGet.Server是由.NET Foundation提供的一个包,用于建立一个ASP.NET应用程序,该应用程序能够在任何运行IIS的服务器上。简单地说,NuGet.Server在服务器上建立一个文件夹,并能够经过HTTP(S)获取内容。设置起来很简单,适用于简单的场景。html

  1. 在Visual Studio中建立一个空的ASP.NET Web应用程序,并将NuGet.Server包添加到它。
  2. 配置应用程序中的Packages文件夹并添加软件包。
  3. 将应用程序部署到合适的服务器。

如下为建立ASP.NET Web应用程序的详细步骤。web

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

  1. 在Visual Studio中,选择File> New> Project,搜索“ASP.NET”,为C#选择ASP.NET Web应用程序(.NET Framework)模板,并将Framework设置为“.NET Framework 4.6”:api

  2. 为应用程序提供除NuGet.Server之外的合适名称,好比上图的MyServer,选择OK,而后在下一个对话框中选择模板,而后选择肯定安全

  3. 右键单击该项目,选择管理NuGet包服务器

  4. 在Package Manager UI中,选择Browse选项卡,而后搜索并安装最新版本的NuGet.Server包(若是您的目标是.NET Framework 4.6)。(您也可使用软件包管理器控制台进行安装Install-Package NuGet.Server。)若是出现提示,请接受许可条款。网络

  5. 安装NuGet.Server将空的Web应用程序转换为软件包源代码。它安装了各类其余软件包,Packages在应用程序中建立一个文件夹,并修改web.config以配置其余信息(请参阅该文件中的注释以获取详细信息)。app

    注意:框架

    在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" />在这种状况下,请删除具备较旧框架版本的元素。dom

  6. 要将应用程序发布到服务器时在源中提供包,请在Visual Studio中将每一个.nupkg文件添加Packages文件夹中,而后将每一个文件的“ 生成操做”设置为“ 内容”并将“ 复制到输出目录”设置“始终复制(右键>属性)布局

  7. 在Visual Studio中本地运行站点(F5)。主页提供了NuGet服务器网址,以下所示。若是您看到错误,请仔细检查您web.config的重复元素是否在前面的步骤5中提到。

  8. 点击上图圈出来的here能够看到关于包的信息。

  9. 第一次运行应用程序时,NuGet.Server从新构建Packages文件夹以包含每一个软件包的文件夹。与NuGet 3.3引入本地存储布局相匹配,目的是提升性能。添加更多软件包时,请继续遵循此结构,如上图。

  10. 本地测试经过后,根据须要将应用程序部署到其余内部或外部站点。

  11. 一旦部署到http://<domain>,您用于软件包源的URL将会是http://<domain>/nuget

配置Packages文件夹

NuGet.Server1.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密钥(例如,在本地团队网络上使用私有服务器时),则能够设置requireApiKeyfalse全部有权访问服务器的用户均可以往此包服务器推送软件包。

从包服务器中移除包裹

使用NuGet.Server时,nuget delete命令会从存储库中删除一个包,只要您将API密钥包含在注释中便可。

若是您想要改变行为来取消包(将其保留为包恢复),请将web.config中的enableDelisting键更改成true。