只有累積,沒有奇蹟

2018年12月18日 星期二

[IIS] 如何解決網站第一個請求 Request 特別慢 ?

問題
相信大家都有類似的經驗,在寫完的 Code 佈署到 IIS 開好網頁要準備要進入網站要測試時,網站的第一個請求總是特別慢,尤其是開發已久的程式要在 Production 驗證時心情總是特別緊張,這等待的時間更是讓人很煎熬(不知道會不會爆炸 XD),如何加速網站第一個 Request 呢 ? 過去待過的公司會在佈署完後透過 Jenkins 去打 Server 來 "喚醒" 它,在此簡單記錄一下如何透過 IIS 設定加速網站第一個 Request 的過程

處理方式 
IIS 8.0 開始提供 網站預先啟動功能 (Preload),主要是透過 Application Initialization模組改善了網站第一位使用者等待網站初始化動作過久的問題,讓 IIS 啟動網站時先進行 Application 的初始化動作,加快 Response 回應時間,設定方式如下

安裝 Application Initialization feature
如果要啟用的話需要先檢查是否有安裝 Application Initialization feature,檢查方式如下 
1. 開啟控制台 > 程式集 > 開啟或關閉 Windows 功能 
2. Internal Information Service > WWW 服務 > 應用程式開發功能 
3. 應用程式初始化選項打勾

設定 IIS
1. 開啟要設定的 Application 應用程式,點選 進階設定
2. 可以看到 預先載入已啟用 功能 設定為 True 
Note : 下方說明可以看到,preloadEnable 為 True 時,就會啟用應用程式的預先載入功能

3. 接下來到應用程式集區
4. 點選要設定的 Application Pool,選擇 進階設定
5. 啟用模式原本是 OnDemand,選擇 AlwaysRunning,按下確定
Note : 下方說明可以看到,[startMode] 設定應用程式集區要以 隨選 或是 永遠執行 模式執行

如果是IIS 7.5的話,需要另外下載 Application Warming up 模組
設定方式也是類似上述步驟,詳細可以參考 Michelle哥 Blog 詳細說明 
ASP.NET 程式中的背景工作 (1)

打完收工,大功告成 !

參考
IIS 8.0 Application Initialization
ASP.NET開發人員不可不知的 IIS
iis8-preloaded

2018年12月16日 星期日

[VS2017] 如何用 Visual Studio 2017 專案設定 .gitignore

前言
一般在開發的時候,會有一些檔案是不需要 commit 到 Git 版控工具裡面,舉例來說當 VS build 完專案會產生 dll 存放在在 bin 目錄底下,或是 packages 資料夾 ( Nuget 下載的套件 ),甚至一些機密的資料或是 config 檔案,這些內容都不需要 Commit 到 git 中,以上需求都可以透過 .gitignore 定義要忽略的文件或檔案,這篇文章簡單紀錄在Visual Studio 中如何設定 .gitignore 檔案

如何設定
透過 Visual Studio 2017 設定
Step 1. 開啟專案檔,點選 Team Explorer 
    
Step 2. 點選設定

Step 3. 會跳出 Git 設定,選擇存放庫設定


Step 4. 接下來會跳出此 Repo 的 Git 設定,點擊編輯 .gitignore 即可進行調整

加碼 : 如何得知預設的 .gitignore 設定
有一份線上工具,可以根據你的操作系統,IDE,語言生成相關 .gitignore 設定檔案
可以參考 : http://www.gitignore.io/

















參考
gitignore
.gitignore for Visual Studio Projects and Solutions
有些檔案我不想放在 Git 裡面…

2018年12月11日 星期二

[.NET] 如何取得 Enum 的 Description 描述字串

前言 
列舉類型 Enum 在 C# 很常用的一種類型,所允許的型別必須是byte、sbyte、short、ushort、int、uint、long、ulong,在使用上沒特別指定的話基本類型是 int,對我自己來說在程式中使用 Enum 而不用 int 的好處是 Code 閱讀上比較清晰,舉例來說在閱讀代碼時第一段代碼使用 Enum 更容易讓人好懂些
if (code == ResponseCode.OK)
//todo 

if (code2 == 500) 
// 500是蝦米
在使用上可以於 Enum 加上 DescriptionAttribute 加上列舉值的描述,這篇文章簡單紀錄如何取得 Enum 自定義的 Description 描述的字串

作法 : 擴充方法 (Extension Method) + 反射 (Reflection)
針對 Enum 類型加上 GetDescriptionText 的擴充方法,讓使用端可以方便使用,擴充方法說明可以參考 MSDN 說明,不囉嗦直接看 Code
// 取得 Enum 列舉 Attribute Description 設定值
public static string GetDescriptionText(this T source)
{
 FieldInfo fi = source.GetType().GetField(source.ToString());

 DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(
  typeof(DescriptionAttribute), false);

 if (attributes.Length > 0) return attributes[0].Description;
 else return source.ToString();
}
使用方式
public enum Days
{
    [Description("今天星期日 End")]
    Sun,
    [Description("今天星期一 猴子穿新衣")]
    Mon,
    [Description("今天星期二 猴子肚子餓")]
    Tue,
    [Description("今天星期三 猴子去爬山")]
    Wed,
    [Description("今天星期四 猴子去考試")]
    Thu,
    [Description("今天星期五 猴子去跳舞")]
    Fri,
    [Description("今天星期六 猴子去斗六")]
    Sat
}

static void Main()
{
    Console.WriteLine(Days.Mon.GetDescriptionText());
}

// print : 今天星期一 猴子穿新衣
後續
這段Code每次建新專案都會用到一次,但都懶得紀錄就每次都google
克服自己的懶惰終於把他記起來了 XD

參考
Get Description Attributes From a Flagged Enum
Getting attributes of Enum's value
擴充方法 (C# 程式設計手冊)

2018年12月6日 星期四

[VS2017] 如何設定 Visual Studio 2017 預設用 Administrator身份執行

發生情境
身為一位專業的大內攻城師,相信很多人都使用過 Visual Studio Debug的經驗,可以透過 偵錯 > 附加至處理序 來找到錯誤,如果不熟悉的可以參考 mrkt 大的 Visual Studio 使用「附加至處理序」來進行偵錯 文章內有詳細的說明,今天重點不是介紹怎麼用,是在 attach IIS process 的過程中,都會跳出一個視窗詢問是否要使用 Admin 權限來進行偵錯,如下圖
之前遇到都很鴕鳥的心態點 Restart Visual Studio 順便偷懶再繼續開發,有天忽然恍然大悟心想不能再這樣浪費生命下去,在此簡單記錄一下遇到這問題時該如何處理

處理方式 

解法 1 : 用 Admin 執行
在Windows 搜尋 Visual Studio 2017,按下右鍵點選以系統管理員身分執行

但每次開始都要先點很容易忘記,對年紀大的人來說是種折磨

解法 2 : 設定 Visual Studio 2017 相容性設定
1. 在Windows 搜尋 Visual Studio 2017,按下右鍵點選 開啟檔案位置
2. 在 Visual Studio 2017 ICON按下右鍵,點選 疑難排解相容性
3. 會跳出 Windows 10 程式相容性排解員,選擇下方的 疑難排解程式
4. 接下來 程序要求額外的權限 打勾
5. 看到以系統管理員身分執行,就大功告成了
設定完成之後,接下來就可以寫更多Bug了(大誤

參考
How to Run Visual Studio as Administrator by default
使用 Visual Studio Debugger 附加至執行中處理序

2018年11月29日 星期四

[.NET] Web API找不到 bin 底下的 roslyn csc.exe ?

發生情境
從版控 Git 上抓下新專案要進行建置時,發生建置失敗的事件錯誤訊息如下
Could not find a part of the path 'D:\git\projectName\bin\roslyn\csc.exe'.
從建置失敗的錯誤訊息中可以很清楚看到失敗是因為 bin 底下少 roslyn\csc.exe 檔案,之前也遇過類似的案例,在此簡單記錄一下遇到這問題時該如何處理

甚麼是 Roslyn ? 
Roslyn 是 C# 之父在 //Build/ 2014 公布的 .NET Compiler Platform (Open Source),可以協助分析程式碼的語法(syntax)、語意(semantics)等等,今天不是在介紹新一代編譯平台,詳細可以參考 Roslyn 平台介紹,重點是為什麼 Roslyn 跟這有關係呢 ? 在 .Net Framework 4.5.2 使用 Visual Studio 2015 建立專案,預設會使用 Roslyn 進行編譯的動作,稍微整理一下有以下幾種方式可以解決

刪除 Roslyn
如果確認專案中不需要使用到 Roslyn,可以透過 Nuget 刪除它
- 開啟Nuget Console,輸入以下指令
PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers

在 MSBuild 設定
專案檔設定 AfterBuild 事件
<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
    <ItemGroup>
      <RoslynFiles Include="$(CscToolPath)\*" />
    </ItemGroup>
    <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
    <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>

Rebuild
在專案建置 > 按下重新建置,即可解決此問題

後記
自己解法都是很直覺無腦的去其他專案 copy roslyn 資料夾後再建置一次就成功了,但方法太爛就不列在上面丟臉了 XDD

參考
could-not-find-a-part-of-the-path-bin-roslyn-csc-exe
找不到 roslyn\csc.exe ?!

2018年11月23日 星期五

[Nuget] Nuget operation failed

前言
    為了取得/建置專案的方便,最近常遇到同事透過 powershell 指令使用svn取得最新的代碼並呼叫MSBuild自動建置專案,今天在執行完前同事所撰寫的 powershell script 後開啟專案跳出 Nuget operation failed 提示訊提,這種情況還是第一次遇到,新筆電與桌基平常都正常來記錄處理臭蟲的過程
症狀
  • 開啟Visual Studio 2017跳出錯誤訊息:Nuget operation failed,如下圖所示

  • 按下專案建置或重build一直無法順利建置成功,大部分錯誤訊息是 Nuget Package restone fail

  • Nuget Package Source 清單為空白 : 打開 Nuget Package Manager 加入新的Source,詭異的是新增source按下儲存還是無法加入,不管怎麼 add 都是空白的


處理方式

從症況來看是Visual Studio讀取 Nuget config異常無法順利,進行下列資訊確認
  1. 確認其他專案是否有此狀況 : 其他專案皆沒有此問題,只有這專案 Nuget loading時fail,因此懷疑是此專案 Nuget config問題,進行異常專案Nuget.Config的確認
    補充 : Nuget package source list 存放位置在 C:\Users\{yourName}\AppData\Roaming\NuGet
  2. 檢查專案 Nuget.config 設定 :  發現讀取來源與專案不同位置專案在 D槽 設定檔讀 C槽 (老天鵝! 實在太神奇了),因此在Visual Studio開啟時loading 不到正確的package source data,因此跳出Nuget operation failed錯誤訊息,將專案 nuget.config 指到正確目錄即可正常
  3. 重開讓 Visual Studio 讀取正確的 Nuget 設定檔,打完收工 !!

2018年11月17日 星期六

[Git] Username and Email must be set before commit

發生情境

最近在新筆電安裝開發常用的軟體,安裝完Tortoise GIT版小烏龜之後無法 commit code ,錯誤訊息如下 : 
    User name and email must be set before commit. Do you want to set these now ?    

這訊息與登入憑證 (login credentials) 無關,在 Git 要進行 Commit 的動作時需要一併提交 Name 和 eMail 等資訊,這狀況遇過好多次,但每次都跳過直接 google 該怎麼解決,事不過三這次就把它紀錄下來方便下次換電腦時遇到使用(是要換幾次工作 咦?),以下提供兩種解決方式

透過指令設定 Name & Email  

1. 開啟Command Line (cmd)
2. 輸入下列指令設定 Name & Email

  • git config --global user.name "Your Name"
  • git config --global user.email "Your Email"


透過介面設定  

1. 開啟小烏龜 > Settings
2. User Info 區域修改你所要設定的 Name & Email


3. 輸入完畢按下套用,打完收工


參考

https://stackoverflow.com/questions/21049090/just-starting-with-tortoisegit-why-does-it-need-my-email-for-a-local-repository


2018年11月13日 星期二

[typescript] 如何得知 Visual Studio 使用 Typescript 的版本?

前言
近期工作都在使用 Typescript 進行開發,要如何得知目前Typescript 版本呢? 

取得目前版本方法
Visual Studio 2017 
  1. 專案按右鍵 > Properties > TypeScript Build Tab > TypeScript Version
    此專案就是使用 2.3 version,如果要修改的話就選要用的版本即可

    注意 : 異動編譯版本有可能部分方法會不支援造成編譯失敗
  2. 暴力修改方式也可以直接到 projectName.csproj 裡面修改 <TypeScriptToolsVersion> 的值,譬如想換成 2.5 版儲存後即設定完成
  3. Developer Command Prompt tool :
    在windows search input  > Developer Command Prompt tool for 2017 > 在console write : tsc -v可取得目前版本

 
Visual Studio 2013

  1. Help > About Microsoft Visual Studio 
  2. Installed products 會顯示目前使用Typescript 版本號

Typescript Compiler Path


Typescript Compiler (tsc.exe) 在安裝時預設位置為 :
C:\Program Files (x86)\Microsoft SDKs\TypeScript
從下圖可以得知,在我電腦目前有1.0, 2.2, 2.3 以及 2.5四種版本

2018年11月10日 星期六

[typescript] 如何在 Visual Studio 2017 安裝 TypeScript 1.8 Compiler ?


前言
最近公司在進行升級 Visual Studio 2017 IDE,有些專案在過去開發時是使用舊的 TypeScript 版本,這篇文章是在記錄如何在 Visual Studio 2017安裝 TypeScript 1.8版 Compiler (預設不會裝) 的過程

釐清案情
專案從版控下載後發現Build不過
,發現錯誤訊息如下圖





錯誤訊息疑似是版本不支援關係
,這時需要查看此專案檔用 TypeScript用到的版本號為 1.8 (專案右鍵 > Properties > TypeScript Build Tab > TypeScript Version),怪異的是版號旁邊出現之前 unavailable 



從上一篇文章可以知道
,Typescript Compiler 安裝時預設位置在 Microsoft SDKs\TypeScript 目錄底下,因此進此目錄確認發現此目錄並沒有 1.8 版本的資料夾 








解決過程
  1. 使用 Nuget Package Manager Console 輸入指令安裝 TypeScript 1.8 版本:  
    PM > Install-Package Microsoft.TypeScript.Compiler -Version 1.8.11
    重新 Build 之後發現依然無法成功建置成功,GG斯米達
  2. 請教Google大神發現 TypeScript 1.8 在 Visual Studio 2013 有安裝檔,點擊 下載 連結後進行安裝
  3. 安裝完後在 Build 發現建置正常,Microsoft SDKs\TypeScript 目錄底下也有 1.8 版本的資料夾,打完收工 !!

Copyright © m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com