Posts
Swashbuckle - Seamlessly adds a swagger to WebApi projects
要在 Web API 加上 Swagger 支援,可以為專案裝上 Swashbuckle 套件。
Install-Package Swashbuckle 安裝完可以看到 App_Start 目錄下會多個 SwaggerConfig.cs 黨,我們需要依需求去做些設定上的調動。
起碼要設定 XML documentation file 的位置,設定只要找到 c.IncludeXmlComments(GetXmlCommentsPath()); 這行,將其註解取消,取消後會看到 GetXmlCommentsPath 這個方法會找不到,這邊需要自己將該方法建立。
GetXmlCommentsPath 方法在實作上只要將 XML documentation file 位置回傳即可。
這邊的 XML documentation file 位置可查閱專案屬性這邊的設定。
設定好後運行將專案運行起來,瀏覽 http://[Domain]/swagger/,沒意外的話就會看到 swagger 頁面。
read morePosts
Common.Logging - A portable logging abstraction for .NET
Common.Logging 是一 Log 元件,提供 Log 的抽象接口介面,以及許多不同的實作,支援 Log4net,Nlog,Microsoft Enterprise Library logging,Microsoft Application Insights,Microsoft Event Tracing for Windows,及 Serilog。
使用上大概分為四個步驟,第一要安裝 Common.Logging 與 Adapter 的套件,接著要設定 Common.Logging,再來是設定 Adapter 的設定,最後就可以透過 Common.Logging 將 Log 寫入。
Common.Logging 的套件透過 NuGet 安裝即可,這邊也可以直接安裝 Adapter 套件,像是要用 Log4Net 來寫 Log 的話,可以直接安裝 Common.Logging.Log4Net1215 這個套件。
套件安裝完後要設定 Common.Logging,開啟設定檔設定 common 的 section group,在 common 的 section group 這邊要設定 Adapter 以及其參數,像這邊指定使用 Log4Net 的 Adapter 去處理 Log,指定並監控 Adapter 的設定檔 log4net.config。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <sectionGroup name="common"> <section name="logging" type="Common.
read morePosts
'SonarLint for Visual Studio - SonarAnalyzer for C# and Visual Basic .NET'
SonarLint for Visual Studio 能讓 Visual Studio 與 SonarQube 整合,將 SonarQube 的 Rule 透過 Analyzer 的方式整進 Visual Studio,讓 Visual Studio 能用 SonarQube 的 Rule 下去對程式進行分析。
套件直接透過 Extension Manager 安裝即可。
安裝完開啟 Team Explorer 連接 SonarQube。
連結上 SonarQube 後將專案與 SonarQube 上的 Project Bind 在一起。
Bind 完後 Solution Folder 會放置 Rule 的設定。
專案也會被加入 Analyzer。
運行分析時也會套用 SonarQube 的 Rule。
read morePosts
SonarQube - Failed to start SonarQube windows service
在啟動 SonarQube windows service 食,有可能會看到像下面這樣的畫面:
如果是透過 Services 視窗啟動的畫,會看到像下面這樣的畫面:
這時可以檢查任務管理員是否有殘留的 java.exe 與 conhost.exe,有的話將之刪除,再次啟動應該就可以了。
read morePosts
SonarQube - Setup SonarQube windows service
要設定 SonarQube Windows 服務,只要運行 InstallNTService.bat 檔即可。
運行完,SonarQube 的 Service 就安裝設定完畢了。
接著要將剛安裝的服務啟動,這邊看是要透過運行 StartNTService.bat 檔,或是透過 Services 視窗將服務啟動都可以。
到這邊服務已經安裝並運行起來了,沒意外的話 SonarQube 已經可以正常使用了。
後續如果要停止或是移除 SonarQube 服務,這邊也都有對應的 bat 檔可供直接叫用。
read morePosts
Grunt - grunt-contrib-imagemin
grunt-contrib-imagemin 套件可以用 Grunt 來將進行檔的壓縮。
使用時先用 npm 安裝 grunt-contrib-imagemin 套件。
npm install grunt-contrib-imagemin --save-dev 接著開啟 gruntfile 設定 task,這邊有些參數可供設定,可參考 gruntjs/grunt-contrib-imagemin: Minify PNG and JPEG images.。
再來將 plugin 載入。
grunt.loadNpmTasks('grunt-contrib-imagemin'); 最後再將 task 註冊即可。
像是下面這邊設定了一個 imagemin 的 task,會將 images 目錄下副檔名為 png/jpg/gif 的圖片進行壓縮,壓縮後會放回到 images 目錄。
var grunt = require('grunt'); grunt.initConfig({ imagemin: { main:{ options: { optimizationLevel: 3, svgoPlugins: [{ removeViewBox: false }] }, files: [{ expand: true, cwd: 'Images/', src: ['**/*.{png,jpg,gif}'], dest: 'Images/’ }] } } }); grunt.
read morePosts
Grunt - Hello Grunt
接著實際來用用看 Grunt,首先 gruntfile 先用 require 載入 grunt,然後用 registerTask 註冊一個任務,這邊帶入任務名為 default,並將任務的動作用 function 指定,這邊這個任務就只是簡單的顯示 hello world 訊息而已。
var grunt = require('grunt'); grunt.registerTask('default', '',function(){ console.log('hello world'); }); 實際透過命令呼叫 grunt,可以看到 default 任務被 grunt 調用了,因此會在螢幕上顯示 hello world。
接著可以試著撰寫難一點的來看看,註冊一個 world 任務,執行時會顯示 hello world,接著註冊一個 hello 任務,需帶入名字執行,執行會顯示 hello 以及帶入的名字,最後註冊 default 任務,執行時會調用 world 任務以及用 adrian 當參數去調用 hello 任務。
var grunt = require('grunt'); grunt.registerTask('world', '', function(){ console.log('hello world'); }); grunt.registerTask('hello', '', function(name){ if(!name || !name.length) grunt.warn('you need to provide a name.
read morePosts
++i vs i++
i++ 與 ++i 如果在不影響結果的情況下使用,有可能是在 for 迴圈的遞增條件下,或是只是很單純的呼叫,可能因為編譯器最佳化的關係,兩者其實沒有什麼不同。
像是下面這樣單獨呼叫 ++i。
var i = 0; ++i; 或是像是下面這樣單獨呼叫 i++。
var i = 0; i++; 其對應的 IL 都是一樣的:
IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 IL_0003: ldloc.0 IL_0004: ldc.i4.1 IL_0005: add IL_0006: stloc.0 IL_0007: ret 但在影響結果的情況下使用(像是處理完做了賦值的動作),除了結果不同外,還會多耗用一個堆疊位置,這邊以一個簡單的例子來看:
var i = 0; var a = i++; 對應的 IL 如下:
IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 // i IL_0003: ldloc.0 // i IL_0004: dup IL_0005: ldc.i4.1 IL_0006: add IL_0007: stloc.
read morePosts
Grunt - Gruntfile
Gruntfile 的設定可以直接從下面例子來看。
module.exports = function(grunt) { grunt.initConfig({ jshint: { files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'], options: { globals: { jQuery: true } } } }); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.registerTask('default', ['jshint']); }; 設定大概會分幾個部份,會有 Task 與 Target 的設定,有 npm 套件的載入,以及 Task 的註冊。
以這例子來說,這邊設定了 jshint task,這個 task 會用 jshint 分析指定的 javascript 的程式。
許多套件都會牽扯到檔案的設定,像是上面例子 jshint 要分析的檔案就是要設定的。Grunt 對於檔案設定提供了三種不同的設定方式,分別是 Compact Format、Files Object Format、Files Array Format。
Compact Format 設定方式如下,可指定一組 source 與 destination 檔案。
grunt.initConfig({ jshint: { foo: { src: ['src/aa.js', 'src/aaa.js'] }, }, concat: { bar: { src: ['src/bb.
read morePosts
Grunt - How to use
使用 Grunt 前需先確定環境是否已經安裝了 Node.js 與 grunt-cli。
npm install grunt-cli -g 環境安裝無誤就可以開始使用 Grunt,使用上大致分為下列幾個步驟:
以 Windows 的操作為例,首先需要有專案目錄。
md <folder> 接著需要建立 npm 套件的設定檔。
npm init 再來要建立 Grunt 設定檔。
type NUL > Gruntfile.js 加入 Grunt 套件。
npm install grunt --save-dev 加入 Grunt plug-in。
npm install <plug-in> --save-dev 開啟 Grunt 設定檔設定 Grunt task。
notepad gruntfile.js 運行 Grunt task。
grunt
read more