只有累積,沒有奇蹟

2019年5月31日 星期五

[VisualStudio] 設定 Resharper Cache 資料夾

說明
身為一位專業的工程師使用 SSD 加速開發是必備要素之一,最近在開發時筆電一直跳出硬碟不足問題,在口袋不夠深無法升級更大的 SSD 狀況下只能找出占空間的殺手,在搶救硬碟大作戰中無意間發現 ReSharper 的 cache 也是頗佔硬碟空間,在查詢後在官方文件發現可以修改存放 ReSharper Cache 的位置,這篇就簡單紀錄操作的過程。

Cache 資料夾
首先在整理系統硬碟時發現 Resharper 底下某個資料夾使用超過 3G 空間
查詢後在 Resharper 官網有提到預設存放 cache 位置   %LocalAppData%\JetBrains\Transient ,另外在 Remove old caches 文章中提到移除 Transient 資料夾並不會影響到 R# 運行,因此在硬碟空間不足的情況下為了節省空間毫不考慮地將此資料夾刪除。但平常開發還是會使用到 Resharper IDE,雖然暫時的解決此問題但日後還是會遇到,因此如果下次在遇到此狀況時有兩種處理方式

清除 Cache
在 Resharper 中提供清除 Cache 功能,可以透過下列方式調整
Visual Studio 2019 > Extensions > Resharper > Option > General,接著按下  Clear Caches  按鈕,就會將 R# cache 值清除

調整 Cache 位置
就像上面所提到的清除只是暫時解法,如果你跟我一樣硬碟空間沒那麼充足的話,可以考慮將存放 cache 進行調整的動作,可以透過下列方式調整
Visual Studio 2019 > Extensions > Resharper > Option > General,stored solution cache in 選擇  Custom Folder  ,下方在選擇你所要儲存的位置,按下 save 重新開啟即設定成功。

設定完成,搶救硬碟大作戰成功 :)

參考
safely-remove-jetbrains-resharper-cache-folder

2019年5月28日 星期二

[NETCore] ASP.NET Core 設定 JSON 序列化格式

前言
JSON.NET 是十分好用的套件,在 ASP.NET Core 1.0 開始內建 JSON.NET方便開發者快速使用,建立 ASP.NET Core 範本專案時會在  ConfigureServices  中的 addMVC 就可以開始使用,這篇介紹如何在 ASP.NET Core 中定義 JSON.NET 統一輸出格式的設定,若有問題歡迎留言一起討論。

範例代碼
首先建立 ASP.NET Core Web App 專案,使用範本專案中有的預設 Value Controller 並將其進行修改,將 Get 與 Get(id) API 修改為自訂的 UserInfo,下
[HttpGet]
public ActionResult<UserInfo> Get()
{
    return new UserInfo()
    {
        Name = "Marcus",
        LoginTime = DateTime.Now.ToString(CultureInfo.CurrentCulture)
    };
}

[HttpGet("{id}")]
public ActionResult<Dictionary<string, string>> Get(int id)
{
    return new Dictionary<string, string>
    {
        { "Name", "Marcus" },
        { "LoginTime", DateTime.Now.ToString(CultureInfo.CurrentCulture) }
    };
}

public class UserInfo
{
    public string Name { get; set; }
    public string LoginTime { get; set; }
}
使用 Get 方法會回傳下列內容
{
    "name": "Marcus",
    "loginTime": "2019/5/29 下午 09:26:51"
}
另一個接口 Get 帶參數 id 的接口,使用自訂的 Dictionary 回傳內容
{
    "Name": "Marcus",
    "LoginTime": "2019/5/29 下午 09:35:19"
}
可以發現 Get 與 Get (id) 回傳的 Json 內容有些微差異,原因是因為在 ASP.NET Core 中回傳的 Json 元素預設會使用 駝峰式大小寫 (PascalCase) 中的 小駝峰式命名法,也就是第一個單字開頭會小寫,第二個單字為大寫,如果希望回傳的統一固定格式的話,可以在 ConfigureServices 加入  addJsonOptions  進行調整,在 MvcJsonOptions 中提供兩種方法 UseCamelCasing 與 UseMemberCasing 來設定 JSON 序列化的大小寫行為

設定方式
預設小寫 - Camel Case
在 AddJsonOptions 中提供 UseCamelCasing 方法設定輸出格式,帶統一為小寫,設定方式如下
services.AddMvc()
    .AddJsonOptions(opt => opt.UseCamelCasing(true));
在重新執行一次 Get(id) API 原本輸出為大寫,調整設定之後就會變為小寫
{
    "name": "Marcus",
    "loginTime": "2019/5/29 下午 22:26:51"
}

預設大寫 - Pascal Case
在 AddJsonOptions 中使用 DefaultContractResolver 方法設定統一為大寫,設定方式如下
services.AddMvc()
    .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
在重新執行一次 Get(id) API 輸出調整設定之後就會統一變為大寫
{
    "Name": "Marcus",
    "LoginTime": "2019/5/29 下午 23:16:11"
}


Json.Net
JSON.NET 從 ASP.NET Core 中就存在,但從 ASP.NET Core 3.0 開始將不會在內建 JSON.NET,會提供一組新的 Json API 提供給開發者使用,命名空間為 System.Text.Json,詳細細節可以參考 Announcing .NET Core 3.0 Preview 5 ,日後若有機會也會試試看 :)


參考

2019年5月26日 星期日

[NETCore] 使用 Dotnet Watch 自動編譯 ASP.NET Core 應用程式

前言
在開發完代碼的時候,為了確保代碼在應用程式執行的狀況,會在 Visual Studio IDE 使用偵錯模式 F5 或是 Ctrl+F5 進行偵錯,如果執行狀況不如預期時就會關閉偵錯,重新修改代碼在編譯再重新進行偵錯,簡單來說流程像是  改 Code > 編譯 Ctrl + Shift + B > 測試 F5 or Ctrl + F5 > 不如預期 > 改 Code  ,仔細想想這些動作都是重複的,如果可以省下重複的動作可以去做更有效益的事情,今天要分享的是 Dotnet watch tool,它可以檢查代碼有異動時重新啟動應用程式,減少修改完 Code 之後看到結果這之間所花費的時間,若有問題歡迎留言一起討論。

設定安裝
如果您的預設是 ASP.NET Core 2.0 以前的版本,需要在專案檔中加入下列 package,如果是 ASP.NET Core 2.1 以上的話,此工具會預設安裝再 .NET Core SDK 中
Microsoft.DotNet.Watcher.Tools
在 Visual Studio 2019 專案點擊 Project 檔案可直接開啟,確認是否有安裝成功

使用方式
dotnet watch 可以監控當代碼進行修改時重新啟動應用程式,當我們在開發 Web API 或是 MVC 專案的時候,如果想要修改完畢之後立即看到成果這非常有用,也可省下時間增加生產力,如果是使用 IISExpress 時預設已經啟用。在 dotnet watch 中支援的 command 如下
使用方式相當簡單,可以透過以下簡單範例展示其效果,首先建立 ASP.NET Core API 專案,並使用  Ctrl + F5 執行,在預設的專案範本 ValueController 中 GET api/values 得到的結果會是 Value1與 Value2
"value1",
"value2"
接著在專案目錄下開啟 powershell,開啟之後輸入下列指令
dotnet watch run
會開啟 dotnet watch 視窗
接著可以在原先的 value Controller 中修改輸出,改為 value11 以及 value22,更新完畢之後儲存,在儲存後可以看到開啟的 console 會偵測檔案有異動,會進行編譯與重新執行應用程式的動作
watch : Exited
watch : File changed: C:\Users\marcustung\source\repos\WebApplication1\WebApplication1\Controllers\ValuesController.cs
watch : Started
接著在到開啟的瀏覽器按下 F5 重新整理,就可以看到 API 輸出已更新完新的內容,完整內容如下

感想
這篇介紹了 dotnet watch 最基本的應用情境,dotnet watch 除了可以自動編譯之外還支援測試等功能,在 MSDN 文章中也有介紹要監控/ 不要監控的設定方式,另外如果想了解 dotnet watch 是怎麼實作出來的也可以參考 GitHub : 傳送門,如果你也有跟我一樣的困擾想增加其工作效率,或許可以試用看看 dotnet watch :)

參考

2019年5月25日 星期六

[NETCore] 使用 Try.NET 建立互動文件

前言
Try.NET 是微軟公布的 open source 互動式文件產生器,可以在網頁上嵌入 .NET 代碼 (目前僅支援 C# 語法),讓閱讀的開發者可以直接在瀏覽器閱讀代碼時直接執行或編輯,也有整合 GitHub Gists 等工具,這篇簡單介紹關於 Try.NET 的介紹與基本應用,若有問題或是錯誤的地方歡迎網路的高手大大給予指導

Try.NET Online
Try.NET 目前線上版在可以在 MSDN 的 執行您的第一個 C# 程式 中看到,在網頁右邊區塊有個  進入焦點模式  ,點選後會跳出程式碼執行區塊,可以在網頁上執行輸入C# 代碼並執行可以在下方輸出看到結果
根據微軟官方部落格介紹,其背後原理是透過 Blazor 與 Web Assembly 做到,可以 Chrome 開發人員工具查看,使用 Console 看到會進行  WASM:Initialized  進行初始化的動作,並且在 Network 頁籤可以看到會執行代碼 dll 的資訊

Try.NET Offline
上面介紹了 Try.NET 在 MSDN 的應用之後,也支援在 markdown 中嵌入代碼資訊 (需要安裝 ASP.NET Core SDK),增加文件閱讀時的可閱讀性與功能性,為了讓開發者可以更快速了解 Try.NET 微軟也提供 sample project,使用方式為開啟 cmd 命令提示字元輸入下列指令
dotnet tool install --global dotnet-try
成功安裝後執行,clone 或是 checkout Tty.NET 的範例 GitHub repo
git clone https://github.com/dotnet/try -b samples
在目錄底下執行  dotnet try  指令,會開啟 Try.NET Offline sample 網站
PS D:\Marcus\git\try> dotnet try
Hosting environment: Production
Content root path: D:\Marcus\git\try
Now listening on: http://localhost:5000
Now listening on: https://localhost:5001
Application started. Press Ctrl+C to shut down.

.NET 互動式文件
Try.NET 可以讓開發人員在 markdown 中嵌入 .NET 代碼,並在網頁上直接執行代碼內容,透過文字不好意會,我們透過剛剛下載的 Try.NET offline Sample 的簡單範例示範,如下所示
可以看到瀏覽器的網址副檔名為 .md,在透過 clone 下載的 repo 開啟 helloworld.md 內容,來比對一下
主要是透過 md 檔案中的下列區段來定義 Try.NET 要執行的區塊,接著來看一下這段代碼
``` cs --region intro --source-file .\myapp\Program.cs --project .\myapp\myapp.csproj 
Console.WriteLine("Hello World!");
```
此區段定義三個參數,告訴 Try.NET 要去哪個位置的檔案找到程式碼,上述範例就是指定代碼位置在資料夾中的 \myapp\Program.cs 中的 intro region,到對應資料夾底下 program.cs 就可以看到對應的 code
namespace myapp
{
    class Program
    {
        static void Main(string region = null,
            string session = null,
            string package = null,
            string project = null,
            string[] args = null)
        {
            switch(region)
            {
                case "intro":
                    Intro();
                    break;
                // 省略
            }
        }
        public static void Intro()
        {
            #region intro
            Console.WriteLine("Hello World!");
            #endregion
        }
        // 省略
    }
}
了解了設定方式,另外也發現在 sample 中也含有 C# 8.0 的範例,在了解文件時官方 MSDN 都有加上範例代碼,有時看到不熟悉的地方或是想要調整範例內容參數時,之前可能會使用 LINQPad 或是開 Console 專案練習,這時套用 Try.NET 使用互動式的操作自己覺得在閱讀上是更有幫助的,以下是 Sample 範例中介紹Asynchronous streams 的例子,在瀏覽時自行調整參數 delay 時間並更新輸出內容

感想
經過測試與練習之後,個人覺得套用 Try.NET 在互動式的操作與閱讀對開發者是更有幫助的,目前 Try.NET 還在開發中,會陸續推出更多新功能與計畫支援更多語言,如果有興趣了解更多可以參考 GitHub : 傳送門 :)

參考
Create Interactive .NET Documentation with Try .NET
Introducing the Try .NET Global Tool - interactive in-browser documentation and workshop creator

2019年5月23日 星期四

[NETCore] 移除未使用的 ASP.NET Core SDK

問題 
最近電腦一直跳出硬碟空間不足訊息提示,在清理硬碟的空間過程中發現電腦安裝多個版本的 ASP.NET Core SDK,身為一位專案自以為跟上技術潮流的開發人員這種狀況應該常遇到,用硬碟的空間來換取跟上潮流的速度是合情合理,但由於公司筆電硬碟空間有限口袋空空也是很苦惱,這篇文章就針對此問題的解決方式做簡單分享若是有不清楚或是錯誤的地方歡迎討論予糾正

解決方案
最直覺的解決方式是透過控制台應用程式,在逐步的點選每一項進行解除安裝的動作,但如果是這樣的話大家都會也不會有這一篇的,首先先透過 command 確認目前電腦中 ASP.NET Core SDK 安裝了那些版本,可以開啟 powershell 輸入下列指令
dotnet --list-sdks 
會列出目前電腦中安裝的 ASP.NET Core SDK 版本與安裝路徑位置
1.1.11 [C:\Program Files\dotnet\sdk]
1.1.12 [C:\Program Files\dotnet\sdk]
1.1.13 [C:\Program Files\dotnet\sdk]
2.1.202 [C:\Program Files\dotnet\sdk]
2.1.500 [C:\Program Files\dotnet\sdk]
2.1.502 [C:\Program Files\dotnet\sdk]
2.1.504 [C:\Program Files\dotnet\sdk]
2.1.505 [C:\Program Files\dotnet\sdk]
2.1.602 [C:\Program Files\dotnet\sdk]
2.1.604 [C:\Program Files\dotnet\sdk]
2.2.105 [C:\Program Files\dotnet\sdk]
2.2.202 [C:\Program Files\dotnet\sdk]
2.2.204 [C:\Program Files\dotnet\sdk]
3.0.100-preview5-011568 [C:\Program Files\dotnet\sdk] 
在安裝 ASP.NET Core SDK 時預設安裝目錄為  C:\Program Files\dotnet\sdk  資料夾底下,因此可以透過指令的方式逐一將上述資料夾刪除,就可以達到硬碟瘦身的效果,另外發現在官方 GitHub 上也有人在討論類似的問題 How to remove old .NET Core SDKs? #2295,討論串中也有人提供 script 來自動刪除相關沒在使用的 SDK 版本,可以使用大神 SCOTT HANSELMAN 分享的 script 刪除所有的 ASP.NET Core SDK
$app = Get-WmiObject -Class Win32_Product | Where-Object { 
    $_.Name -match "Microsoft .NET Core SDK"
}
 
Write-Host $app.Name 
Write-Host $app.IdentifyingNumber
pushd $env:SYSTEMROOT\System32
 
$app.identifyingnumber |% { Start-Process msiexec -wait -ArgumentList "/x $_" }
 
popd
接著在到安裝連結 : 傳送門,重新安裝所需要的最新版 ASP.NET Core SDK 安裝包
當然,如果你想省下安裝的動作,希望在刪除時候保留最新的版本不要刪除的話,可以參考另一個版本 GitHub 連結 : 傳送門 ;安裝時分不同資料夾來區分自己覺得是常見的方式,也可以避免升級時影響到其他版本,在另一個討論串Uninstalling Visual Studio, should uninstall any .NET Core SDK that it installed #6896 也有提到在移除時也會有類似的困擾,其中有人提到 
Starting in Preview 3 of .NET Core 3.0, the Windows Installer treats each "feature band" as a single product and installs over previous copies. This means all versions of 3.0 will install over each other (preview and release), and then all versions of 3.1.
We hope to have a global tool that releases older tools later, but for now the existing SDKs must be removed by hand.
有討論才有更好的進步空間,或許在目前還需要手動更新尚未有更好的解決方案,ASP.NET Core 3.0 preview 5 已經在五月更新,希望在 3.0 正式版同時可以解決此問題 :)

參考
How to remove old .NET Core SDKs? #2295
Uninstalling Visual Studio, should uninstall any .NET Core SDK that it installed #6896

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

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com