一. 搭建私有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 .inRelease # 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. 描述的不是特别清楚, 如果你有疑问, 请在评论里提出