文章

目前顯示的是 2020的文章

Angular自訂後端Route

圖片
前言
原本開發的.Net Core程式,想要跟Angular並存,例如:路徑/kim開頭為Angular App,其他則使用MVC。
開發環境 Visual Studio 2019 .Net core 3.1 Angular 9
解決方式
修改Starup.cs,將原本的app.UseSpa 註解或移除        //app.UseSpa(spa =>             //{             //    // To learn more about options for serving an Angular SPA from  ASP.NET Core,             //    // see https://go.microsoft.com/fwlink/?linkid=864501             //    spa.Options.SourcePath = "ClientApp";             //    if (env.IsDevelopment())             //    {             //        spa.UseAngularCliServer(npmScript: "start");             //    }             //});
加入自訂Angular進入的Route,本例為 kim。 public-host:For Live Reload使用         app.Map("/kim", client =>             {                 client.UseSpa(spa =>                 {                     spa.Options.SourcePath = "ClientApp";                     if (env.IsDevelopment())                     {     //開發時期,需要指定base-href為kim    spa.UseAngularCliServer(npmScript: "start --   --base-href=/kim/ -…

Jenkins-備份鎖定錯誤

圖片
問題 公司的Jenkins,原本可以正常備份,但這幾天備份出現錯誤,如下訊息: [ERROR] org.codehaus.plexus.archiver.ArchiverException: Problem creating zip: The process cannot access the file because another process has locked a portion of the file org.jvnet.hudson.plugins.backup.BackupException: java.io.IOException: org.codehaus.plexus.archiver.ArchiverException: Problem creating zip: The process cannot access the file because another process has locked a portion of the file         at org.jvnet.hudson.plugins.backup.utils.BackupEngine.doBackup(BackupEngine.java:115)         at org.jvnet.hudson.plugins.backup.utils.BackupTask.run(BackupTask.java:130)         at java.lang.Thread.run(Unknown Source) Caused by: java.io.IOException: org.codehaus.plexus.archiver.ArchiverException: Problem creating zip: The process cannot access the file because another process has locked a portion of the file         at org.jvnet.hudson.plugins.backup.utils.BackupEngine.handleEnd(BackupEngine.java:104)         at org.apache.commons.io.DirectoryWalker.w…

WIX-建立URL註冊碼U啟動程式

圖片
前言    此篇今天在測試Notion筆記的桌面應用程式,針對在登入時,透過網頁啟動應用程式這個功能,感到有點好奇。雖然這不是很新奇的功能,幾年前就在iTune上看過,只是自己 寫的程式,都沒試著去作此功能。
實作
開始前,依照微軟提供的說明,我們需註冊URL相關機碼,reg範例檔案內容如下: [HKEY_CLASSES_ROOT\WixLab] @="URL:WixLab Protocol" "URL Protocol"=""
[HKEY_CLASSES_ROOT\kai\DefaultIcon] @="C:\\Program Files (x86)\\WixLab.WpfApp\\WpfApp.exe"
[HKEY_CLASSES_ROOT\WixLab\shell] @=""
[HKEY_CLASSES_ROOT\WixLab\shell\open] @=""
[HKEY_CLASSES_ROOT\WixLab\shell\open\command] @="C:\\Program Files (x86)\\WixLab.WpfApp\\WpfApp.exe /url \"%1\""
根據上方的機碼內容,在安裝程式時,將內容註冊進去。本範例使用Wix安裝範本作說明(關於Wix請參考)。 打開Product.wxs,新增一筆Component如下,紅字WixLab為Url Schema開頭。
    <!-- 註冊URL執行的機碼-->       <Component Id="RunURLComponent" Guid="*">         <RegistryKey Root="HKCR" Key="WixLab" >           <RegistryValue Type="string" Name="URL Protocol" Value=""/>           <RegistryValue Type="string"…

刪除Docker資料夾中的windowsfilter目錄

圖片
前言 之前在測試Docker for Windows時,下載了不少Image檔案在我的E槽內,大約有30G左右。今天因硬碟不足,想要來清掉它,但卻出現權限不足,無法刪除的訊息。另一點,很怪的是,Image目錄已經指向其他位置了,都已經沒用到了,也不能刪。

解決方式 下載檔案 https://github.com/jhowardmsft/docker-ci-zap 解壓後,使用管理者權限執行command 如下,就可以完全刪除該目錄 docker-ci-zap.exe -folder "E:\Hyper-V\Docker\windowsfilter"
其它參考 http://edwardkuo.github.io/paper/2017/03/10/Docker/Deletewindowsfilter/

Visual Studio Angular 8 升級到9

圖片
前言   這兩天在學習Angular,對於習慣使用Visual Studio 2019的我,使用Angular專案樣板,當然是最好的選擇了,可以省一下一些.Net Core與Angular的一些配置工夫。

建立好專案後,查看package.json的Angular版本為8.2.12,最新的版本為9.x.x。嗯...看到有新版本後,強迫症發作,順手就下了升級命令,結果代誌不是憨人想的那麼簡單,升級後的程式, 無法執行,最後還是得依靠google大神解決....=.=。
升級方式   環境條件 .Net Core 3.1 Node.js 10.13
命令模式,切到ClientApp目錄 1.先升級到 8 的最後版本 ng update @angular/core@8 @angular/cli@8
2.再升級到 9 ng update @angular/core@9 @angular/cli@9
3.打開main.ts,移除程式如下: export { renderModule, renderModuleFactory } from '@angular/platform-server';
4.打開package.json,修改"start: 原 "start": "ng serve", 修改後 "start": "echo Starting... && ng serve",
以上....收工。
其它參考 https://jasontaylor.dev/asp-net-core-angular-9-upgrade/

NSwag Studio 產生API的Client介接程式碼

圖片
前言    一直以來在寫Web API時,給同事參考都是透過Swagger產生的說明文件。如下圖使用Swashbuckle 套件產生。
專案環境 .Net Framework 4.8 ASP.NET Web API 2 ASP.NET MVC  跟API 取資料,作展示。
問題    同事詢問是否可以直接提供介接類別,讓他直接可以使用。例如:Google API SDK。這...若要手刻的話,可能會累屬偶,幸好科技發達,關於這方面,早已有相關的解決方法。

如何使用 1. Web API 安裝NSwag
安裝Nuget package NSwag.AspNet.Owin Microsoft.AspNet.WebApi.Owin Microsoft.Owin.Host.SystemWeb ps: 關於為什麼不用Swashbuckle,請參考此篇
在Web API專案新增Startup.cs [assembly: OwinStartup(typeof(NSwagLab.Startup))] namespace NSwagLab {     public class Startup     {         public void Configuration(IAppBuilder app)         {             var config = new HttpConfiguration();             app.UseSwaggerUi3(typeof(Startup).Assembly, settings =>             {                 //針對RPC-Style WebAPI,指定路由包含Action名稱                 settings.GeneratorSettings.DefaultUrlTemplate =                     "api/{controller}/{action}/{id?}";                 //可加入客製化調整邏輯                 settings.PostProcess = document =>                 {                     docum…

AzureDevOps-使用Azure Artifacts建立私有的Nuget來源

圖片
前言
同事前兩天問到AzureDevOps 的Artifacts可以用來管理私有nuget套件,但..沒什麼研究,無法回答=.=。今日找到一篇教學文章,跟著作一次,,並將相關步驟記錄下來。
如何使用
1.建立Feed
2.設定Feed  3.選擇nuget.exe

4.將上圖紅框內的xml另存成Nuget.config,並下載最新的Nuget.exe放到方案目錄內。
ps:要放哪都可以,放在方案目錄內,是個人開發習慣。
5.透過nuget.exe封裝套件

進入PowerShell後,先切換目錄到.nuget目錄,nuget.exe及組態檔所在位置。

.\nuget.exe pack ..\AzureArtifactsLab\AzureArtifactsLab.csproj
封裝後會產出 AzureArtifactsLab.1.0.0.nupkg,版號自動參照AssemblyInfo.cs

6.發行nuget .\nuget.exe push -source "KimFeedLab" -ApiKey az AzureArtifactsLab.1.0.0.0.nupkg 執行後,第一次會先跳出登入畫面


發行完畢,回到Azure Devops會看到已發佈的套件
7.在開發工具的Nuget Package Sources加入新的來源 ps: 來源的URL在第3點建立的Nuget.config內。
完成後,就可以在套件管理參考囉

其它參考 範例下載 https://azuredevopslabs.com/labs/azuredevops/packagemanagement/#exercise-1-working-with-azure-artifacts https://www.nuget.org/downloads

Jenkins-升上2.223的安全性問題解決

圖片
問題
1.同事回報在Jenkins的操作出現錯誤,訊息如下:
No valid crumb was included in the requestSERVLET
2.AzureDevOps的push trigger無法觸發,發生403錯誤。
以上發生是在Jenkins 版本升上 2.223所遇到問題。
解決方式
1.在防止跨站點請求偽造的設定,將代理相容性打勾。
此問題發生在公司的測試主機上,正式主機無此問題。在搜尋相關文章後,方向往安全性設定尋找,比對了2台主機的設定後,找到了差異的地方,設定後,回復正常。

ps:此設定原本是Prevent Cross Site Request Forgery exploits,之前為了讓第三方網站呼叫,把它停用。更新最新版後,Enable proxy compatibility 就變成是未勾選狀態。

2.第三方網站呼叫Jenkins要改用toke的驗證。原本使用的是帳號/密碼的方式,會出現403錯誤。
建立token,進入位置:http://localhost:8080/user/[你的帳號]/configure。 紅框的token,建立後只會顯示一次,代替原本使用的密碼。
更新AzureDevOps 的User API token,輸入將剛在Jenkins建立的token。

其它參考 https://blog.csdn.net/wanglin_lin/article/details/73849146 https://jenkins.io/doc/upgrade-guide/2.176/#upgrading-to-jenkins-lts-2-176-3

將域名轉移到Cloudflare

圖片
動機 便宜、安全、好管理、可以用更多的記錄。 免費模式下1000筆。 目前使用的服務商,1年費用要16.5美金 CloudFlare 11.92美金
如何轉移 先去原本的提供商要求驗證碼。例如:Eznow說明,需寫信去問。 在CloudFlare新增Site ,輸入你的域名後,在下一步使用Cloudflare Register 作轉移。 輸入原本的提供商給你的驗證碼(我發信給Eznow後,大約1個小時收到) 確認後, 下一步就是輸入付款資訊,此次需付轉移費+之後第1年的續約費用,約12美金。 完成,等待約2個小時。 補充:還要順便請原本的註冊商,將域名的"鎖定"解除,我是過了2天,看遲遲未移轉,檢查Unlock Domain的狀態一直未過,才寫信去問。當我問完後,過十分鐘就收到已解鎖的訊息回覆。 其它參考 https://free.com.tw/cloudflare-registrar/ kimx.info 及www.kimx.info 轉到im.kimx.info。使用Page Rule,需等10分鐘才會生效 關於Cloudflare的快取 先開啟proxy才會有效 google bloger 不能用proxy,會因為https導致太多redirect

VS2019 Report Viewer CreateFontPackage Exception

圖片
前言
同事回報開發時期在debug時,會出現如下訊息,但不影響執行結果。
原因 Microsoft.Reporting.WebForms 15.0後,在IIS Express 32位元會出現此問題。 解決方法 改用IIS Express 64位元: Tools --> Options --> Projects and Solutions --> Web Projects
參考連結 https://stackoverflow.com/a/60049627/4872843

VS2019 Report Designer 問題排除

圖片
前言
同事回報Vs2019的報表檔案無法建置。相關訊息如下: Severity    Code    Description    Project    File    Line    Suppression State Error        The "RdlCompile" task was not found. Check the following: 1.) The name of the task in the project file is the same as the name of the task class. 2.) The task class is "public" and implements the Microsoft.Build.Framework.ITask interface. 3.) The task is correctly declared with <UsingTask> in the project file, or in the *.tasks files located in the "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin" directory.     WebApplication5            

Severity    Code    Description    Project    File    Line    Suppression State Error        The "Microsoft.Reporting.RdlCompile" task could not be loaded from the assembly Microsoft.ReportViewer.WebForms, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91. Could not load file or assembly 'Microsoft.ReportViewer.WebForms, Versio…

Jenkins - 使用Java rumtime 64位元

圖片
前言
同事回報Jenkins建置時,發生錯誤:StackOverflowError,查詢相關文章後,判斷跟JVM使用記憶體上限有關。
解決方法 在jenkins.xml將記憶體調高,不過在32位元下的Java runtime下,最多只能調到1.5G左右,我目前的設定值為1024mb。鑑於目前CI主機有足夠的記憶體,可以讓Jenkins好好發揮。所以試著將Java runtime 改成64位元,才可以設定更高的記憶體。
1.下載java runtime 64 位元。本文安裝路徑:C:\Program Files\Java\jre1.8.0_241
2.修改jenkins.xml。 executable : 原為Jenkins內建的jre,改成jre 64位元安裝位置。ps:要指定.exe副檔案,網頁才有辨法執行。 arguments :本例 X2048m 為設定記憶體到2G <service>   <id>jenkins</id>   <name>Jenkins</name>   <description>This service runs Jenkins continuous integration system.</description>   <env name="JENKINS_HOME" value="%BASE%"/>   <!--     if you'd like to run Jenkins with a specific version of Java, specify a full path to java.exe.     The following value assumes that you have java in your PATH.   -->   <executable>C:\Program Files\Java\jre1.8.0_241\bin\java.exe</executable>   <arguments>-Xrs -Xmx2048m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLife…

vs2019 unable to connect to iis express

圖片
問題 今天一開工要執行Web專案時,就出現一個莫名的錯誤訊息"unable to connect to iis express"。將專案重新開啟也一樣會持續發生。
解決方式 到方案目錄下,將檔案總管的隱藏項目打開。將.vs目錄刪除即可。
其它參考 https://developercommunity.visualstudio.com/content/problem/599446/unable-to-connect-to-web-server-iisexpress-unless.html

Jenkins - 使用FTP發行程式

圖片
目前有一支Console程式,在Jenkins建置後,會發行到內部網路的其他主機。現在有一需求是要跨Internet到遠方主機。想來想去,透過FTP好像是唯一可行的方式。
安裝Publish Over FTP 安裝後,到Configure,建立FTP的登入資訊。
紅框打勾後,會使用一條連線完成所有傳輸。避免被FTP Server判定為使用太多條連線,而發生錯誤。
透過Pipeline執行FTP 以下為透過Pipeline Snippet Generator產生的語法。但產生後,會缺少2個參數,少了這2個,建置會報錯,如下紅字。 configName:KimFtp  在Configure設定好的組態檔。 sourceFiles: '**/**' 所有檔案及子目錄 ftpPublisher paramPublish: null,masterNodeName:'',alwaysPublishFromMaster: false, continueOnError: false, failOnError: false, publishers: [[configName: 'KimFtp', transfers: [[asciiMode: false, cleanRemote: false, excludes: '', flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '**/**']], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false]]

其它/參考 Publish Over FTP

Visual Studio 快速切換方案檔

圖片
前言   今天在Visual Studio 2019 的方案總管視窗,發現了一個小功能,可以讓你在同一資料夾下,快速切換方案檔。如下範例程式,資料夾內有7個專案及2個方案檔。

SolutionViewLab.sln 包含所有專案 SolutionViewLab-Lite.sln 只有使用2個專案
如何使用
在方案總管內,先切換到 Folder View。
切換後,會幫你將該目錄下的方案列出來,此時你就可以隨時切換你想要的方案檔。
總結
以往開發時,會針對近日常使用的方案作開啟,而想切換至另一個專案性質不同的方案時,則要再另外開啟。這樣的 作法,雖然可以,只是每次需要重新載入專案檔,較浪費時間。而此切換的作法,速度明顯快很多。