前言

在幾乎完成 Gulp 實作 .Net Web Application 持續整合時,正巧遇上 Visual Studio 2015
Update 3 release,開發團隊成員也陸續進行升級。因為這次是新的專案,開發初期套件
更動較頻繁,很快發現專案進行 package restore 的過程中,出現部分套件相依錯誤或者
找不到某些套件的錯誤 (猜測是 Nuget 升級的關係),個人將進行Visual Studio升級後解
決了這個問題。而CI部分下載並更換最新的 Nuget.exe 即可正常運作。
本篇文章將簡單介紹如何透過 gulp套件執行 Nuget.exe ,替專案進行 package restore。

本系列文章大概內容如下(暫定,會修改):

使用 Gulp 實作 Asp .Net Web Application 持續整合
Using gulp to implement .Net web application continuous integration
1.Gulp 基礎教學
2.流程簡介、代入參數與修改AssemblyInfo
3.透過 Gulp:nuget-runner 進行 NuGet Package Restore
   3.1  方案架構
   3.2  Package Restore
   3.3 下載與設置 NuGet.exe
   3.4 進行 NuGet Package Restore
4.透過 Gulp:gulp-msbuild 進行 Build Project
5.透過 Gulp:gulp-nunit-runner 進行 Unit Test
6.Gulp CI Deploy (1) - 透過Gulp : Robocopy 進行 Deploy
7.Gulp CI Deploy (2) - 使用 MSDeploy (WebDeploy) 進行 Deploy
8.Gulp CI IIS Management - 使用 PowerShell 變更實體路徑
9.最終篇: Team City 設定 與 Build Scripts 撰寫

本系列文章使用的環境如下:
1.Visual Studio 2015 Community Update 3
2.Visual Studio Core
3.TeamCity
4.Nunit 3.2.1.0
5.NuGet 3.4.4.1321


介紹

方案結構
這次系列文章的方案結構如下圖所示:主要為 1 個 WebAPI Project、 1 個 MVC Project 與 2 個
Test Projects,測試專案命名規則結尾為UnitTests,方便我們後續進行測試作業。
方案結構



Package Restore
無論前端套件(如:nodejs 的 node_modules)或者後端套件(.net 的 package),不建議上傳至版本
控管伺服器,正如前面文章所描述,當套件版本更新或開發人員進行版本異動,皆有可能造
成編譯錯誤。比較好的方式是開發人員下載程式碼後,於個人開發環境重新進行安裝套件後進行編譯,降低套件問題發生。而持續整合的流程也不例外。
在 Visual Studio 2015 環境,偵測沒有 package 或 缺少套件的情形下,於編譯前會自動進行
 Restore,而在持續整合的環境下,我們必須透過 NuGet.exe 協助。
package 內容


下載與設置 NuGet.exe
Step 1. 到 Nuget 網站 下載 Nuget.exe
首頁下載 NuGet.exe

Download 下載 Nuget.exe

Step 2. 將 Negut.exe 放置於方案下 tools 資料夾下 (可以個人習慣放置,但是在 編輯 gulpfile.js
請依實際放置位置設定)




進行 NuGet Package Restore
Step 1.輸入以下指令安裝 nuget-runner 套件
npm install --save-dev nuget-runner

Step 2.於 gulpfile.js 加入以下程式碼
(詳細 Nuget.exe 參數內容可以參考 https://docs.nuget.org/consume/command-line-reference)
var gulp = require('gulp'),
      Nuget = require('nuget-runner');

gulp.task('restore', function() {
    var nuget = Nuget({
        nugetPath: 'tools/NuGet.exe',            
        verbosity: 'detailed'

    });

    return nuget.restore({
        packages: 'XXXX_2016.sln',      
        source: ['https://www.nuget.org/api/v2/'],        
        noCache: true,  
        requireConsent: true,
        packagesDirectory: 'packages',
        solutionDirectory: '',
        disableParallelProcessing: true,  
        verbosity: 'detailed'
    });
});


Step 3. 先將 package 內資料全部刪除。


Step 4. 執行指令 gulp restore
gulp restore


Step 5. 完成,您也可以檢查一下package資料夾是否有套件



上一篇:[Gulp][.Net Web Application][CI] 流程簡介、代入參數與修改AssemblyInfo
下一篇:[Gulp][.Net Web Application][CI] 透過 Gulp:gulp-msbuild 進行 Build Project

參考資料

1.Using Gulp to Build and Deploy .NET Apps on Windows
2.MSBuild - MSDN - Microsoft
3.Command Line Reference - NuGet Docs
4.NUnit-Console Command Line Options
5.gulp API docs


本篇文章有部分內容參考相關網站資料,若有不妥請告知,我將盡快移除。