Posts
NuGet - Setting up a private NuGet server
要架設一台私人的 NuGet Server,我們可以先在 Visual Studio 上開啟一個空的網頁專案。
{% img /images/posts/CreatePrivateNuGetServer/1.png %}
接著透過 NuGet 安裝 NuGet Server
{% img /images/posts/CreatePrivateNuGetServer/2.png %}
這樣一個 NuGet Server 網站就已經準備完成了,直接將之在 Visual Studio 上運行起來看看,應該可以看到 NuGet Server 實際運行起來的樣子。這邊會有一個精簡的頁面告知 NuGet Server 正在運行,並提供在 Visual Studio 上要用來設定的網址,以及怎樣發送 NuGet 套件上 NuGet Server。
{% img /images/posts/CreatePrivateNuGetServer/3.png %}
在 Visual Studio 初步的測試沒問題的話,準備將整個網站部署到 IIS 上面
{% img /images/posts/CreatePrivateNuGetServer/4.png %}
{% img /images/posts/CreatePrivateNuGetServer/5.png %}
{% img /images/posts/CreatePrivateNuGetServer/6.png %}
{% img /images/posts/CreatePrivateNuGetServer/7.png %}
記得 IIS Website 的 Application pool 這邊要設定為使用 .
read morePosts
Travis CI - Trigger build with service hook test
一般來說, Travis CI 在使用時會主動在程式碼 Push 到 Server 時自動做建置的動作,但難以避免的,有的時候我們還是會需要在特定時機點手動觸發建置。這時如果為此特意 Commit ,整個版控紀錄會變得很亂,所以要透過 GitHub 的 Test Service Hook 功能去觸發 Travis CI 建置。
使用前要先進入 Repository 的 Service Hooks 頁面。
這邊可直接由 GitHub repository’s setting 進入, 或是由 Travis CI 進入。
{% img /images/posts/TravisCIServiceHookTest/1.png %}
進入後會看到像這樣的畫面:
{% img /images/posts/TravisCIServiceHookTest/2.png %}
往下捲動找到 Travis CI 後點擊。
{% img /images/posts/TravisCIServiceHookTest/3.png %}
接著點選 Test Hook 按鈕觸發 Travis CI 建置就可以了。
{% img /images/posts/TravisCIServiceHookTest/4.png %}
{% img /images/posts/TravisCIServiceHookTest/5.png %}
read morePosts
MediaWiki - Create wiki page
MediaWiki 要建立 Wiki Page,大致來說有下列幾種方式:
透過網址列去建立 透過連結 Wiki Page 的方式建立 透過搜尋框搜尋後建立 這邊分別簡單的帶過…
透過網址列去建立 使用這種方式去建立 Wiki Page,需要帶入特定格式的網址至網址列。
網址格式會像下面這樣:
http://[Wiki url]/index.php?title=[Title]&action=edit 將特定的網址帶入
{% img /images/posts/CreateMediaWikiPage/1.png %}
就可以建立出對應的 Wiki Page。
{% img /images/posts/CreateMediaWikiPage/2.png %}
透過連結 Wiki Page 的方式建立 要建立一個 Wiki Page,通常是因為有連結的需求。可能是側邊欄,也有可能是其它 Wiki Page。無論是哪種,我們都會透過語法將 Wiki Page 做個連結。
連結後回頭看一下撰寫的 Wiki Page,這時將滑鼠移上去,會很明顯的看到該連結頁面不存在。
{% img /images/posts/CreateMediaWikiPage/3.png %}
點擊連結即可建立對應的 Wiki Page。
透過搜尋框搜尋後建立 這邊需先透過搜尋框搜尋欲建立的 Wiki Page 是否已經存在。
{% img /images/posts/CreateMediaWikiPage/4.png %}
若不存在, MediaWiki 會在這邊告知搜尋的 Wiki Page 不存在,同時會有個建立頁面的快速連結,點擊下去即可建立指定的 Wiki Page。
{% img /images/posts/CreateMediaWikiPage/5.
read morePosts
Code Compare - File and Folder Merge Tool
Code Compare 是ㄧ用來對檔案、目錄做比對與合併的程式,能輕易整合開發人員的開發環境。
使用前請至 Visual Studio Gallery 下載。
{% img /images/posts/CodeCompare/1.png %}
下載後點擊安裝…
{% img /images/posts/CodeCompare/2.png %}
{% img /images/posts/CodeCompare/3.png %}
{% img /images/posts/CodeCompare/4.png %}
安裝這邊會提供一些設定選項,可供使用者決定有哪些環境需要整合。
{% img /images/posts/CodeCompare/5.png %}
{% img /images/posts/CodeCompare/6.png %}
安裝完成就可以透過被整合的環境下去觸發使用。
像是筆者這邊在安裝時有勾選與 Visual Studio 整合,就可以在 Visual Studio 的方案總管中直接選取兩個檔案做比對。
{% img /images/posts/CodeCompare/7.png %}
{% img /images/posts/CodeCompare/8.png %}
Link Code Compare extension Code Compare - File Diff & File Merge Tool, Folder Compare Tool
read morePosts
MEF - Handle ReflectionTypeLoadException during MEF composition
使用 MEF 去 Compose 指定目錄下的所有 Part,我們可能會像下面這樣透過 DirectoryCatalog 去提供 Export Parts,讓 CompositionContainer 去做 Compose。
private void ComposeCurrentDirectoryParts() { using (var catalog = new DirectoryCatalog(Environment.CurrentDirectory)) using (var container = new CompositionContainer(catalog)) { container.ComposeParts(this); } } 多半上面這段程式能夠運行良好。但有的時候會發生不如預期的效果,因為 DirectoryCatalog 會去找目錄下指定的檔案,可能會找到一些組件會相依於其它不存在的組件,導致發生 ReflectionTypeLoadException 錯誤。如果你碰到這樣的問題,可以避開使用 DirectoryCatalog,改成自己去遍巡處理,並用 AssemblyCatalog 載入,載入失敗則將之忽略不予處理。像是下面這樣:
public class SafeDirectoryCatalog : ComposablePartCatalog { #region Fields private AggregateCatalog _catalog; #endregion Fields #region Properties /// <summary> /// Gets the catalog. /// </summary> /// <value> /// The catalog. /// </value> private AggregateCatalog m_Catalog { get { return _catalog ?
read morePosts
Visual Studio - JSON Debugger Visualizer in Visual Studio 2013
以往我們在做 JSON 資料的除錯時,若是不加裝外掛, 在 Visual Studio 上只能透過純文字模式下去檢視。不易查閱與驗證,若資料是非 Format 過的,則更是麻煩。
Visual Studio 2013 Update 2 CTP 後 Visual Studio 加入了 JSON Debugger Visualizer 功能。透過這個功能,能有效的解決這樣的困擾。
它提供了較為友善的除錯界面,將 JSON 資料展開用樹狀結構呈現。不管是否是 Format 過的資料,都是一樣的呈現方式。
{% img /images/posts/JSONDebugVisualizer/1.png %}
{% img /images/posts/JSONDebugVisualizer/2.png %}
透過樹狀結構的呈現方式, JSON Debugger Visualizer 清楚的表達了 JSON 資料的階層性與其值。
若是 JSON 內資料多到不易找尋,它也提供了搜尋的功能,能輔助我們快速的從 JSON 資料中找出感興趣的部分…
{% img /images/posts/JSONDebugVisualizer/3.png %}
找到感興趣的資料後,若有需要我們可以在上面按下滑鼠右鍵,在彈出的滑鼠右鍵快顯選單中有提供一些複製的功能,像是複製該資料的路徑、Key、Value、或是 Key 跟 Value 一起複製。
{% img /images/posts/JSONDebugVisualizer/4.png %}
最後一提,要是這邊所查閱的資料是非 JSON 格式的,或是格式有誤。 JSON Debugger Visualizer 會改以純文字的方式呈現,並告知我們該資料不是 JSON 格式。
read morePosts
WPF - Binding a ListView to DataTable
要在 WPF 中將 DataTable binding 到 ListView 上,我們主要有幾種做法…
像是把 DataTable 轉型成 IListSource 後,叫用 GetList 方法,並將回傳值塞進 ListView 的 ItemSource 屬性
lvTable.ItemsSource = ((IListSource)dt).GetList(); 或是直接將 DataTable 的 DefaultView 塞進 ListView 的 ItemSource 屬性
lvTable.ItemsSource = dt.DefaultView; XAML 這邊我們只要直接將 DataTable 的 Column 繫上 ListView 內 Grid Column 的 DisplayMemberBinding 就可以了。
以個簡單的例子來看,假設我們要繫結的表單長的像下面這樣:
var dt = new DataTable(); dt.Columns.Add( "Key"); dt.Columns.Add( "Value"); dt.Rows.Add( new object[] { "Key1", "Value1"}); dt.Rows.Add( new object[] { "Key2", "Value2"}); ... lvTable.
read morePosts
WPF - DoEvents in WPF
在做大量的運算處理時,不能避免的有時候會需要做 UI 更新的動作,以給予使用者一些反饋。理想上來說,這時我們應該將處理動作切離主執行緒,在另外一個執行緒去處理,需要反饋時再將更新動作帶回主執行緒。但難免有時會偷懶將處理動作直接放在主執行緒上運行,並利用 DoEvents 去釋放資源,讓 UI 得以更新。
以這樣的情景來說,WinForm 中可直接叫用現成的 DoEvents ,但在 WPF 中則無現成的方法可供叫用,所以我們必須借用 WinForm 的 DoEvents 方法。
只要將 System.Windows.Forms.dll 組件加入參考,接著將命名空間 System.Windows.Forms 加入,再呼叫 Application.DoEvents() 方法即可。
using System.Windows.Forms; ... Application.DoEvents(); ... 或者是自行撰寫像下面這樣的程式來處理也可以。
void DoEvents(){ DispatcherFrame f = new DispatcherFrame(); Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, (SendOrPostCallback)delegate(object arg) { DispatcherFrame fr = arg as DispatcherFrame; fr.Continue=True; }, f); Dispatcher.PushFrame(frame); } Link DispatcherFrame Class (System.Windows.Threading) 程湘之間: WPF的UI更新方式 Application.Doevents in WPF
read morePosts
WPF - Auto select ListBoxItem when mouse over
在使用 WPF 的 ListBoxItem,若有要在滑鼠游標經過時自動選取的需求,可以為 ListBoxItem 套用像下面這樣的Style:
<ListBox.Resources> <Style BasedOn="{StaticResource {x:Type ListBoxItem}}" TargetType="{x:Type ListBoxItem}"> <Style.Triggers> <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="True"> <Setter Property="IsSelected" Value="True" /> </DataTrigger> </Style.Triggers> </Style> </ListBox.Resources> 這個 Style 只是很簡單的透過 DataTrigger 去偵測 ListBoxItem 的 IsMouseOver屬性值,當屬性值為True時觸發,透過 Setter 將 ListBoxItem 的 IsSelected 屬性值設為True。
Style 套上後,滑鼠游標移動過去,就會自動將 ListBoxItem 給選取起來。
read morePosts
ProcDump - A powerful command line dump utility
ProcDump 是ㄧ命令列 Dump 工具。能監控 Process 狀態,在滿足特定的條件時自動產生 Dump 文件。
像是我們常常會要在 CPU 飆高時或是應用程式無回應做些分析,若用工作管理員去手動產生 Dump 文件,我們可能會無法準確的抓到要 Dump 的時機。而若用一些分析工具,多半要額外安裝,又會 Dump 出太多不相關的資訊。
在這種清況下, ProcDump 就特別好用。程式小巧可攜,又可彈性的設定 Dump 的條件,準確的 Dump 出我們想要的資訊。
程式主檔可至 ProcDump - TechNet - Microsoft 這邊下載
{% img /images/posts/ProcDump/1.png %}
下載完後可直接呼叫命令查閱使用方式以及使用參數
ProcDump v6.00 - Writes process dump files Copyright (C) 2009-2013 Mark Russinovich Sysinternals - www.sysinternals.com With contributions from Andrew Richards Monitors a process and writes a dump file when the process exceeds the specified criteria or has an exception.
read more