搭建NuGet服务器

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

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

以下为创建ASP.NET 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”:

  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以配置其他信息(请参阅该文件中的注释以获取详细信息)。

    注意:

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

  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。

posted @ 2020-11-10 14:39  Vincent-Huang  阅读(253)  评论(0编辑  收藏  举报