發表文章

使用WIX建立Window安裝程式 - 包含.Net Framework

圖片
前言    此篇是接續,前一篇[使用WIX建立Window安裝程式 - 基本安裝],本文要來介紹如何在安裝時,順便將離線檔的.Net 4.8也順便安裝好。
建立Bootstraper安裝專案 1.選擇專案樣板:Bootstrapper Project for Wix v3。此專案用來將多個安裝專案及必要條件,作封裝用。
2.加入應用程式專案、前一篇建立的Setup,以及相關extension參考,如下圖的(1)
另外圖的第2點Resources目錄下有一個.net 4.8的離線安裝程式,等會我們會把它封裝入安裝程式內。ps:此檔案不會在Github的原始檔內,因為檔案太大無法簽入。需要的話請另外下載
3.打開Bundle.wxs,修改如下圖,此為部份設定,完整的請參考Github的完整程式。關於此檔案的設定,實現的功能如下: PackageGroup : 指定.net framework 4.8的檢查條件及安裝來源、命令等。 Chain : 設定安裝順序,本例:先安裝.net 4.8後再安裝Setup.msi。


設定完畢後,按建置會產出一個Setup.exe檔案,此檔案已含安裝程式.msi及.net 4.8安裝程式,安裝畫面如下: 用戶端沒有安裝.Net 4.8的話,會先安裝: 安裝完畢後,若此次有安裝.Net4.8,會要求重新開機。 若本來已有的話,則會出現Launch 按鈕。

參考連結 Sample (主要參考) http://www.shisujie.com/blog/WiX-ToolsetIndex Bootstraper theme Sample https://www.shisujie.com/blog/Install-the-dotNet-Framework-Using-Burn

使用WIX建立Window安裝程式 - 基本安裝

圖片
前言    目前有一支.Net 4.8的Window程式,要讓使用者下載來安裝。在安裝過程,若用戶端沒有安裝.Net 4.8的話,也要在安裝過程中一併加入。關於.Net Framwork的安裝,以個人之前的經驗, 若採用線上安裝的話,在某些情況下,常會發生一些奇怪的問題(例如:防火牆、網路中斷等),而導致安裝失敗。所以打算用離線的安裝來解決此問題。
一開始是使用Visual Studio傳統的安裝專案,但封裝後的安裝檔,在給使用者安裝,沒那麼直覺,它會產出2個檔案: Setup.msi : 主要的應用程式安裝,若不考慮.net的執行條件的話,可以直接使用這個安裝。 Setup.exe : 會先檢查必要條件後,例:.net 4.8。再進行msi的安裝。 上述,勢必要先作一個壓縮檔,給使用者下載後,再解壓縮來安裝才行。
WIX Setup
研究相關的安裝工具後,找到Wix這個不錯的安裝工具,它是透過XML格式定義安裝元表,並在Visual Studio有對應支援的專案樣板。開始必須先安裝如下:
專案樣板 : Wix Toolset Visual Studio 2019 Extension SDK :https://github.com/wixtoolset/wix3/releases/download/wix3112rtm/wix311.exe 安裝後的路徑:C:\Program Files (x86)\WiX Toolset v3.11\bin\ 程式要參考的dll位置。 建立第一個安裝專案 1.選擇專案樣板: Setup Project for Wix v3。主要的安裝專案,輸出msi 。不考慮安裝.net framework的話,可以直接用這個。
2.加入應用程式專案參考,本例為WpfApp
3.加入Wix Extension參考,本例參考WixUIExtension,瀏覽路徑:C:\Program Files (x86)\WiX Toolset v3.11\bin\
4.打開Product.wxs,修改如下圖,此為部份設定,完整的請參考Github的完整程式。關於此檔案的設定,實現的功能如下: 開始功能表及桌面捷近。 開機後馬上執行。 基本的安裝畫面。例如:License 同意。
ps:關於各個設定的指令,本文不多作介紹,想瞭解的請參考官方說明
設定完畢後,按建…

.Net Core IIS 503錯誤

圖片
這兩天試著把測試的Blazor App部署到IIS後,一執行就出現503錯誤,並且Pooling整個停止。
測試環境: .Net Core 3.0 Window 10 Build 17763 部署方式
503錯誤 一開始Google時查到的解決方式,大部份的文章都是裝完ASP.NET Core Runtime & Hosting Bundle,即可解決。但我安裝完, IIS及電腦都重開機過,但依然出現503錯誤。 查詢"事件檢視器"後,發現一些缺少.dll的錯誤。如下列表:
The Module DLL C:\Windows\System32\inetsrv\isapi.dll failed to load.  The data is the error. The Module DLL C:\Windows\System32\inetsrv\iiswsock.dll failed to load.  The data is the error. The Module DLL C:\Windows\System32\inetsrv\iprestr.dll failed to load.  The data is the error. The Module DLL C:\Windows\system32\inetsrv\aspnetcore.dll failed to load.  The data is the error.
上述訊息,不是一次性的全部出現,是在我根據訊息,查詢到的可能缺少的元件,安裝後,再出另一個的訊息....昏。由於是本機測試,不管三七二十一,也不太確定是哪個安裝修正哪個錯誤了。 相關安裝: IP Address and Domain Restrictions Web Socket Web Deploy 3.6

在解決了一系列的錯誤後,最後還有另一個奇怪的錯誤要修正。為何寫在這,沒有列在上方? 因為它的解決方式較特別。 The Module DLL C:\Windows\system32\inetsrv\aspnetcore.dll failed to load.  The data is the error.
在找不到解決方式情況下,索性將C:\Program Files\IIS Express下的aspnetcore…

Try.Net - 建立互動式文件

圖片
這兩天看在Net conf 2019,看到一個蠻有趣的介紹。配合Markdown編輯及讀取既有程式碼的方式,變成一份線上可以即時互動的說明文件。直接看範例,比較容易懂。

安裝說明
1.打開command視窗,安裝dotnet-try dotnet tool install --global dotnet-try --version 1.0.19317.5
2.在專案加入Package參考,這個套件為alpha,Include prelease要打勾,才看得到。 專案類型: .Net Core 3.0 ConsoleApp。 System.CommandLine.DragonFruit System.CommandLine.Experimental

3.修改Program.cs  修改進入函式的參數,新增region,此為判斷進入的文件要指定該呼叫哪個函式用。 新增2個測試函式Intro,Collections。函式內需要被線上執行的部份,使用region區段區隔。

4.在專案目錄的上層新增一個文件目錄"mydoc",並加入檔案如下: Readme.md,此為文件首頁進入點。
HelloWorld.md 底下程式碼片碼紅框為重點,指定此區段的參數,該呼叫哪個程式檔案及區段。
ps:文件目錄不能放在專案目錄內,經測試後,會造成找到重複類別的錯誤。
測試程式 在文件目錄下執行命令。 dotnet try
執行後,會開啟文件首頁。
進入Hello World連結後,會看到Program.cs的程式碼已帶出來,並可以直接執行。
其它參考 .netConf Beyond Copy + Paste : Creating Interactive Documentation 微軟教學文件 文章範例

Visual Studio 啟用 diagnostic tool

圖片
這兩天Visual  Studio 2019 更新後,在debug時,發現我的Diagnostic Tools不見了....。 花了些時間重新把它呼喚回來.....如下:
如何打開
Ctrl+Alt+F2 開啟Diagnostic Tools視窗。


啟用IntelliTrace              Tools -> Options -> IntelliTrace -> General

這樣在debug時,就可以即時查看memory,cpu,sql等資訊..
參考連結

https://blogs.msdn.microsoft.com/msdntaiwan/2015/07/21/visual-studio-2015/

https://social.msdn.microsoft.com/Forums/en-US/d399acca-2cd5-4c03-a53f-7b8d79c9cb9c/diagnostic-tools-events-window-empty-blank?forum=vsdebug

Pipeline Shared Library-目錄方式載入-2

圖片
前言 前一篇提到了Pipeline Shared Library-目錄方式載入,可以確保不會因git無法連線,而無法執行工作。但...這樣作的另一個缺點是,當要Library修改後,要更新時又要手動copy一次。這種手工工作,作一次還ok,多了自己都看不過....。

解決方法
1.新增另一個Job,透過git下載Library,並將設定將Library的位置指向它。



2.上面第1點基本設定好就可以使用,但有一個問是放在workspace的目錄,會定時被清空,所以需作一下調整,將git下載後的Library複製到另一目錄,並將設定將Library的位置指向它。 本例:複製到根目錄 stage ('copy') {                  steps {              fileOperations([fileCopyOperation(                   excludes: '',                   flattenFiles: false,                   includes: "**/**",                   targetLocation: "${JENKINS_HOME}\\SharedPipelineLibrary"                 )])

                echo "${JENKINS_HOME}"              }         }

Pipeline Shared Library-目錄方式載入

圖片
前一陣子將Jenkins上的Job改成Pipeline grovvy的方式撰寫腳本後,整個CI的運作,也變得相當有彈性。上手後,真的是回不去原本的GUI設定方式。在Job比較多時,針對相同的腳本可以使用Shared Library的方式將共用方法封起來,方便維護與調用,參考文章
問題 回到本文,這陣子同事回報最近的Job在建置失敗時,都沒有發出通知。檢查原因後,發現兇手為Pipeline引用Shared Library時,因載入的方式使用的是git,當git server連不到時,整個Job內的腳本是不會被運行的。所以當然也不會執行到falire的通知區段。
解決方式 Google一下後,好像沒有人有類似的問題....可能是我們家的主機放在網路不甚穩定的區域吧...XD。在找不到相關解決方式下,將方向轉往若不使用git取得,改用目錄位置取得。作法如下:
1.安裝Plugin : File System SCM 2.將Library搬到Jenkins主機目錄,本例:D:\Jenkins\KimPipelineLib
3.到Pipeline Shared Library設定相關參數。 Default version:若是git方式,此值為branch,現在為File System,為檔案比對的識別標籤(必填)。 選擇Legacy SCM後,才會出現File System的參數設定。     Library的主機目錄位置。

參考文章 https://blog.johnwu.cc/article/jenkins-pipeline-job-shared-library.html
https://www.slideshare.net/roidelapluie/jenkins-shared-libraries-workshop