代码改变世界

windows系统下搭建私有nuget仓储服务器, 打包程序集并推送到私有nuget仓储服务器

2018-09-28 17:28  卡车司机  阅读(597)  评论(0编辑  收藏  举报

一. 搭建私有nuget仓储服务器

1. 使用Visual Studio创建Web Application项目, .NET Framework选择4.6.1, 空Web项目

2. 安装私有nuget仓储服务器相关包文件

请在程序包管理器控制台中执行 Install-Package nuget.server, 等待完成

3. 修改Web.config配置文件

a. 在system.web节点下, 如果有多个compilation节点, 仅保留targetFramework="4.6.1"的节点, 其他的请删除;

b. 在system.webServer的handlers节点, 只保留verb="GET,HEAD,POST,PUT,DEBUG"的"ExtensionlessUrlHandler-Integrated-4.0"项, 其他的"ExtensionlessUrlHandler-Integrated-4.0"项请删除

1 <handlers>
2     <remove name="OPTIONSVerbHandler" />
3     <remove name="TRACEVerbHandler" />
4     <remove name="WebDAV" />
5     <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
6     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,PUT,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
7 </handlers>

c. 设置appSettings节点中的apiKey值, 这个是私有nuget仓储服务器的密钥, 请自己设置

d. 建议将appSettings节点中的allowOverrideExistingPackageOnPush设置为true, ignoreSymbolsPackages设置为false

 

二. 创建目标解决方案

这个是你实际的项目, 省略.

项目目录结构图:

 

二. 打包程序集

  这里我使用powershell脚本方式. 在你的解决方案文件所在目录下创建一个nupkg的目录, 然后在这个目录下创建一个名为pack.ps1的powershell脚本文件, 文件内容如下

# Paths
$packFolder = (Get-Item -Path "./" -Verbose).FullName
$slnPath = Join-Path $packFolder "../"
$srcPath = Join-Path $slnPath "src"

# List of projects
$projects = (    
    "MyNugetServer"    
)

# Copy all nuget packages to the pack folder
foreach($project in $projects) {
    
    $projectFolder = Join-Path $srcPath $project
    $projectFileName = $project + ".csproj"
    Set-Location $projectFolder

    Remove-Item -Recurse (Join-Path $projectFolder "bin/Release")  
    nuget pack $projectFileName -Build -Prop Configuration=Release -OutputDirectory .\bin\Release
    
    # Copy nuget package
    $projectPackPath = Join-Path $projectFolder ("/bin/Release/" + $project + ".*.nupkg")
    Move-Item $projectPackPath $packFolder -Force
}

# Go back to the pack folder
Set-Location $packFolder

 打开powershell ISE, 转到pakc.ps1文件所在目录, 然后输入./pack.ps1即可开始执行打包任务

 

三. 将打包好的包文件推送到私有nuget仓储服务器

  这里我使用powershell脚本方式. 在你的解决方案文件所在目录下创建一个nupkg的目录, 然后在这个目录下创建一个名为push.ps1的powershell脚本文件, 文件内容如下 

# Paths
$nupkgFiles = (Get-Item *.nupkg).FullName

# Copy all nuget packages to the pack folder
foreach($nupkgFile in $nupkgFiles) {
    nuget push $nupkgFile -Source http://127.0.0.1/nuget -ApiKey 12345qwert
    Remove-Item $nupkgFile
}

  其中设置的apiKey, 请替换成你自己在第一步中设置的值.

  打开powershell ISE, 转到push.ps1文件所在目录, 然后输入./push.ps1即可将你的包文件推送到私有nuget仓储服务器

 

四. 其他

  1. 目录结构不一定要和我的完全一致, 只要你自己的项目目录结构与powershell脚本中的规则一致. 如果你不清楚, 还是根据我的目录结构来吧. 特别要注意的是解决方案文件(sln)的路径, 我是放在项目根目录下的

  2. 描述的不是特别清楚, 如果你有疑问, 请在评论里提出