這次主要的出發點是測試從原本自己刻的http client換成refit來讓程式碼更簡潔
那就必須確保資料最後都一致
可能會有的問題例如datetime的轉換
那一開始我就重新從config取設定然後注入用
RestService.For<IGitHubApi>()
這樣的方式注入,然後用字串取得Interface
但是這樣重新注入就測不到本身設定有沒有問題,因為重新刻了
繼續閱讀 “.NET 整合測試 nUnit"這次主要的出發點是測試從原本自己刻的http client換成refit來讓程式碼更簡潔
那就必須確保資料最後都一致
可能會有的問題例如datetime的轉換
那一開始我就重新從config取設定然後注入用
RestService.For<IGitHubApi>()
這樣的方式注入,然後用字串取得Interface
但是這樣重新注入就測不到本身設定有沒有問題,因為重新刻了
繼續閱讀 “.NET 整合測試 nUnit"在找如何在後端自動排程的時候 最簡單的就是IScheduler
多找幾篇之後有幾個選項 但其實就是主要看到的文件 跟 文章都偏向quartz 就直接用了
主要參考這一篇:https://dotblogs.com.tw/wasichris/2020/12/16/172524
官方文件:https://www.quartz-scheduler.net/
基本上的架構就是 scheduler & job
開job做為要做的工作注入
自動排程
他可以設定簡單的定時/定點、日曆等等
那我選用cronexpression來讓我決那些分鐘跑一次
切換頻率
因為更改一開始注入的job不可能,因為是用cronexpression注入singelton
所以我改為兩種不同頻率的job 一個預設暫停
我在這邊有改寫scheduler 增加一個叫做 run on start
在Task StartAsync裡面linq的時候增加run on start = true
然後就分別暫停/開啟相互切換job
不過遇到的問題就是切換的時候兩個都執行了 不過目前影響不大就先這樣
如果遇到通用套件,自己內部使用又不想放到外面,除了使用dll傳送檔案之外,自己架設一個nuget server就是可以使用的選項
那在看microsoft自己的官方nuget server的時候,發現是dotnet framework,github的星星數量也才幾百,多找了幾個之後,選用Baget Server
原本的nuget server的問題就是會遇到core NET 5 6等 target framework的時候就會跑不出來
https://loic-sharma.github.io/BaGet/
在我測試Baget的時候都沒有遇到問題
不過需要再研究是 他接到database做搜尋的方式
那目前有做出來的就是
針對不同的framework
<PropertyGroup>
<TargetFrameworks>
netstandard2.1;
netcoreapp2.1;
netcoreapp2.2;
netcoreapp3.0;
netcoreapp3.1;
net5.0;
net6.0;
</TargetFrameworks>
<Version>1.1.1</Version>
</PropertyGroup>
在不同的framework用不同的dependency
<ItemGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.1' ">
<Reference Include="System.Net" />
<PackageReference Include="Newtonsoft.Json" Version="6.0.5" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net5.0' ">
<Reference Include="System.Net.Http" />
<Reference Include="System.Threading.Tasks" />
<PackageReference Include="Newtonsoft.Json" Version="8.0.3" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
<Reference Include="System.Net.Http" />
<Reference Include="System.Threading.Tasks" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
在不同framework做不同的事情
public static string version()
{
#if NET5_0
return "5.0";
#elif NET6_0
return "6";
#elif NETCOREAPP2_1
return "21";
#else
return "else";
#endif
}
一個系統沒有LOG 就是一隻飄來飄去的金魚
有了log4net 這樣發展已久的工具就該善用
手上的系統原本有的就是用SQL自己寫了一個登入 如果登入就寫入
那 就打掉 用正式的套件吧
繼續閱讀 “Dotnet 加入log4net 並開始記錄"在用了預設的 identity之後 就會要加欄位了
原本的用法是有userstore/ usermanager rolestore rolemanager
以下是已經改好之後的設定
private UserStore<ApplicationUser> userStore;
private UserManager<ApplicationUser> userManager;
private RoleStore<ApplicationRole> roleStore;
private RoleManager<ApplicationRole> roleManager;
userStore = new UserStore<ApplicationUser>(applicationDbContext);
userManager = new UserManager<ApplicationUser>(userStore);
userManager.UserValidator = new UserValidator<ApplicationUser>(userManager) { AllowOnlyAlphanumericUserNames = false };
roleStore = new RoleStore<ApplicationRole>(applicationDbContext);
roleManager = new RoleManager<ApplicationRole>(roleStore);
繼續閱讀 “AspNet 新增user/role表格" 這次要做的是在webform裡面加上登入登出以及權限機制
有分成membership跟identity兩種
membership是在2.0導入 identity是在4.X導入
繼續閱讀 “Asp.NET 登入機制 membership & identity"既然上一篇是把專案的docker image做好,這邊就是把它發布
如果直接發布的話,沒甚麼問題,就是直接放PORT
不過既然沒有用IIS,就加個nginx,算是這次要加上的新工具吧
這邊就直接先放上docker compose
繼續閱讀 “docker compose dotnetMVC與API + nginx"這次主要要做的事情是在一台遠端進去,不能連外網的機器上,發布起我們的專案,dotnetMVC+API
主要步驟就會 把專案docker化、docker compose兩支專案、然後把image,dockercompose, docker desktop都送過去遠端電腦,然後安裝發布
繼續閱讀 “將dotnet core用docker包起來"