Posts
T4 Template - Debugging a T4 Text Template
要對 T4 Template 進行偵錯,首先需將 Template 的 Debug 設定開啟。
{% img /images/posts/DebugT4Template/1.png %}
接著在要除錯的位置上加入中斷點。
{% img /images/posts/DebugT4Template/2.png %}
然後在 T4 Template 檔案上按下滑鼠右鍵,在彈出的滑鼠右鍵快顯選單中點選 ‘Debug T4 Template’ 選單選項,即可開始進行偵錯。
{% img /images/posts/DebugT4Template/3.png %}
{% img /images/posts/DebugT4Template/4.png %}
{% img /images/posts/DebugT4Template/5.png %}
Link Debugging a T4 Text Template Tiny Happy Features #1 - T4 Template Debugging in Visual Studio 2012 - Scott Hanselman Oleg Sych - » T4 Tutorial: Debugging Code Generation Files
read morePosts
Outlook - Archive Email
要 Archive Outlook Mail Box,可透過 Outlook 的 Auto Archive 的功能。
開啟 Tools 主選單,點選 ‘Option…’ 主選單選項。
{% img /images/posts/ArchiveOutlookMail/1.png %}
在 Options 對話視窗中將頁面切至 Other,點擊 ‘AutoArchive…’ 按鈕。
{% img /images/posts/ArchiveOutlookMail/2.png %}
在 AutoArchive 對話視窗這邊,可以視需求做些對應的設定,像是 Archive 起來的資料要存放的位置、Archive 的週期…等。
{% img /images/posts/ArchiveOutlookMail/3.png %}
除了定期運行的 AutoArchive 外,若有需要我們也可以手動觸發 Archive。
開啟 File 主選單,點選 ‘Archive…’ 主選單選項。
{% img /images/posts/ArchiveOutlookMail/4.png %}
在 Archive 對話視窗這邊要決定是要直接套用 AutoArchive 的設定下去運行,還是要再指定這次運行要 Archive 的資料、多久的資料要 Archive、以及存放的位置。
{% img /images/posts/ArchiveOutlookMail/5.png %}
設定好按下 OK 按鈕即會開始進行 Archive 動作。
Link Outlook 自動封存簡介 - Outlook 思 .
read morePosts
ASP.NET MVC - Post array data to MVC controller
最近在用 JQuery 傳送陣列資料給 MVC Controller,資料無法如預期般的被送過去。查看了一下送過去的資訊,看起來是送的資料格式不符合 Model Binder 預期的格式所導致。
以基本型別的陣列來說, Model Binder 預期的格式為
arrayName = arrayValue1& arrayName = arrayValue2 但是透過 JQuery 發送的資料卻是
arrayName[] = arrayValue1& arrayName[] = arrayValue2 而以物件陣列來說, Model Binder 預期的格式為
arrayName[0] .propertyName1 = property1Value& arrayName[0] .propertyName2 = property2Value 但是透過 JQuery 發送的資料卻是
arrayName[0] [propertyName1] = property1Value& arrayName[0] [propertyName2] = property2Value
要解決這樣的問題要馬可以在 Client 這邊將資料做個轉換,要馬就是在 MVC 這邊要透過客製 Model Binder 的方式自行轉換。這邊筆者是比較傾向 Client Side 處理,且黑暗大那也已有現成又漂亮的解法,
對於基本型態陣列的處理,可參閱使用jQuery.post傳送字串陣列參數到ASP.NET MVC - 黑暗執行緒這篇,透過$.param()將參數序列化,並在traditional參數這邊帶入true,指定用傳統的陣列參數的序列化形式即可。
對於非基本型態的陣列處理,可參閱使用jQuery.ajax傳送物件陣列給ASP.NET MVC - 黑暗執行緒這篇,黑暗大刻了一個 JQuery Plugin 在發送資料前會將資料格式用正規表示式進行對應的轉換。
read morePosts
Devart T4 Editor - VS add-in for editing T4 templates
Visual Studio 內建的 T4 Template Editor 很陽春,不僅無法 Syntax Highlighting,也無法 Intellisense,在除錯時查看變數也非常不便,更無法靜態程式碼分析及 Format 程式碼,造成開發 T4 Template 的效率大幅降低。
Devart T4 Template 是ㄧ Visual Studio 的擴充套件,能解決這些煩人的問題,提升 T4 Template 的開發速度。
套件可至 Download Devart T4 Editor 這邊下載安裝。
{% img /images/posts/DevartT4Editor/1.png %}
{% img /images/posts/DevartT4Editor/2.png %}
{% img /images/posts/DevartT4Editor/3.png %}
{% img /images/posts/DevartT4Editor/4.png %}
{% img /images/posts/DevartT4Editor/5.png %}
{% img /images/posts/DevartT4Editor/6.png %}
安裝完重啟 Visual Studio,開啟 T4 Template 檔案,可以看到 Syntax Highlighting 已被支援。
{% img /images/posts/DevartT4Editor/7.png %}
Intrllisense 支援。
read morePosts
Web API - Web API Self Hosting
要 Self Hosting Web API,首先需要安裝 Microsoft.AspNet.WebApi.SelfHost 套件。
建立 HttpSelfHostConfiguration 並指定要監聽的位置。
var config =new HttpSelfHostConfiguration("http://localhost:32767"); 設定 HttpSelfHostConfiguration,像是 URL Routing 資訊。
config.Routes.MapHttpRoute("API","{controller}/{action}/{id}", new{ id =RouteParameter.Optional }); 如果要被 Host 的 Web API 在其它的組件,這邊也可建立一個實作 IAssembliesResolver 的 SelfHostAssemblyResolve 類型。
public class SelfHostAssemblyResolver : IAssembliesResolver { #region Properties /// <summary> /// Gets the path. /// </summary> /// <value> /// The path. /// </value> public string Path { get; private set ; } #endregion Properties #region Constructors /// <summary> /// Initializes a new instance of the <see cref="SelfHostAssemblyResolver"/> class.
read morePosts
.NET - Access Embeded Resource
Embeded Resource 可以將程式需要的檔案內嵌在程式組件內,會增加組件的大小,但是使用者看不到該檔案,也不會因為檔案位置錯誤造成程式出錯。當系統中存在有必要的檔案,且不希望讓使用者能夠輕易動到的話, 使用 Embeded Resource 是不錯的選擇。
要設定 Embedded Resource ,只要將檔案加入專案,然後在屬性視窗中將 Build Action 設為 Embeded Resource。
要取用時透過 Assembly.GetExecutingAssembly() 取得當前組件,然後叫用 GetManifestResourceStream() 並帶入 Resource Name 取得指定 Embeded Resource 的 Stream,最後再從 Stream 讀出我們所要的資料就可以了。
所以像是純文字檔,就可以像下面這樣處理:
private static string ReadAllTextFromEmbededResource(string resourceName) { var assembly = Assembly.GetExecutingAssembly(); using (var stream = assembly.GetManifestResourceStream(resourceName)) using (var reader = new StreamReader(stream)) { return reader.ReadToEnd(); } } Link c# - How to read embedded resource text file - Stack Overflow How to read Embedded Resource in c# | Hadjloo’s Daily Notes 如何使用 Visual C# 內嵌和存取資源
read morePosts
ASP.NET MVC - Remove unnecessary view engine
ASP.NET MVC 預設會載入多個 View engine,儘管在專案建立之時我們就已明確的指定了所要使用的 View engine。
以一個最簡單的空專案來看,這邊特地將 Home 的 Index view 給刪掉,接著將之運行,運行後因為找不到 View 所以會顯示錯誤頁面。
{% img /images/posts/RemoveUnnecessaryViewEngine/1.png %}
這邊可以看到系統會嘗試載入不同程式語言所撰寫的不同 View engine 檔。然而在大部分的情況下,我們只會選用ㄧ種程式語言與View engine。
因此像這樣載入過多的 View engine 反而形成不必要的耗費,故我們可以在啟動時加入程式將之移除。
protected void Application_Start() { ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new RazorViewEngine()); ... } 再次運行就會看到這樣作就只會嘗試載入我們預期的 View Engine。
{% img /images/posts/RemoveUnnecessaryViewEngine/2.png %}
如果真有同時載入多個 View engine 的需求,那我們就不能像這樣直接的將 View engine 給移除,取而代之的是我們必需去調整 View engine 的順序,取比較好的載入順序。
read morePosts
ODP.NET - Oracle Data Provider for .NET
要用 C# 存取 Oracle,通常我們會使用 ODP.NET。
ODP.NET 目前有 x86、 x64 與 Managed 三個版本可供使用。
Managed 版本為純 .NET 的解決方案,具備位元適應性, 能兼容於 x86 與 x64 的環境,可不安裝 Oracle client 使用,只是目前尚未支援 UDT 操作。
x86 與 x64 版本的 ODP.NET 不具位元適應性,需依運行環境使用正確的組件,且需安裝對應的 Oracle client,或是將會用到的 Oracle client 組件一併發佈,使用起來較 Managed 的麻煩,但能使用完整的功能。
不論選用哪個版本做開發,使用前都需先將組件加入參考,這邊可直接透過 NuGet 安裝對應的套件。
{% img /images/posts/ODP.NET/1.png %}
{% img /images/posts/ODP.NET/2.png %}
{% img /images/posts/ODP.NET/3.png %}
{% img /images/posts/ODP.NET/4.png %}
組件載入後,程式撰寫起來跟一般的 ADO.NET 程式沒什麼兩樣。
首先要先建立資料庫的連線。
using(var conn = new OracleConnection(connstring)) { ... } 接著將建立的資料庫連線開啟。
read morePosts
Visual Studio - Extension Manger Cannot Connect From Behind a Firewall
筆者工作環境的電腦,Visual Studio 內的 Extension Manager 無法正常的運作,查了一下才知道這是因為防火牆擋住了 100-Continue 的訊息發送所導致。
{% img /images/posts/VSExpect100Continue/1.png %}
因此要將 Common7\IDE 下的 devenv.exe.config 開啟調整,將 100-Continue 這個 Feature 關閉才可正常運作。
{% img /images/posts/VSExpect100Continue/2.png %}
檔案開啟後,在 system.net 的節點內加入 <servicePointManager expect100Continue="false"/>,將 100-Continue 這個 Feature 給關閉就可以了。
{% img /images/posts/VSExpect100Continue/3.png %}
Link visual studio 2010 - Cannot connect to any online resource - Stack Overflow ServicePointManager.Expect100Continue 屬性 (System.Net) Visual Studio Extension Manger Cannot Connect From Behind a Firewall Expect:100-continue | 風雪之隅
read morePosts
WCF - Self hosting service
要 Self hosting WCF 的服務。首先要先將 System.ServiceModel 加入參考。
{% img /images/posts/WCFSelfHosting/1.png %}
接著在程式設計中建立 ServiceHost。建立的同時要指定欲運行的 Service 型態,以及要 Host 的位置。
var serviceUrl = "http://localhost:6525/ExecuteService"; var serviceUri = new Uri( serviceUrl ); using (var host = new ServiceHost (typeof(WcfServiceLibrary1. ExecuteService), serviceUri)) { ... } 再來要建立 ServiceMetadataBehavior 並對其做些對應的設定,像是啟用 HttpGet。
... var smb = new ServiceMetadataBehavior (); smb.HttpGetEnabled = true; smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; ... 將剛建立的 ServiceMetadataBehavior 加到 ServiceHost.Description.Behaviors。
... host.Description.Behaviors.Add(smb); ... 在開始需要服務時,叫用 ServiceHost 的 Open 方法啟用 WCF 服務。
read more