tag:blogger.com,1999:blog-23538536967635243622024-03-16T09:11:30.777+08:00Kim's NoteLearning is like sailing against the current <br>
not to advance is to drop backKimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comBlogger274125tag:blogger.com,1999:blog-2353853696763524362.post-61401873129653493702023-10-13T10:47:00.007+08:002023-10-13T10:50:05.945+08:00使用DevTunnel公開本機URL<p> <span style="color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; white-space-collapse: preserve;"><b>Foreword</b></span></p><ul class="bulleted-list" id="ae057fe4-d1eb-4ab5-b5a1-4cb5d5e346cf" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">使用微軟提供的Dev Tunnels取代之前使用NGROK的方式,將本機開發的URL公開在外部網路。</li></ul><ul class="bulleted-list" id="f36e3d4e-6380-43a4-9f2e-a0c378a47405" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">此方式為方便與外部服務整合測試,例如:LineAPI</li></ul><ul class="bulleted-list" id="d109c710-8128-4101-a998-e5cc06f2c4e3" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">Dev Tunnels 有2種使用方式,以下會介紹何使用</li></ul><h1 id="2912d464-ce78-41ca-8e1f-94944dd8d9ec" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space-collapse: preserve;">1. Visual Studio 2022 .NetCore程式</h1><ul class="bulleted-list" id="229e3808-0920-4730-b707-3d911786fad9" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">內建就有Dev Tunnels功能,第一次使用先建立tunnels<figure class="image" id="5e1369ed-f053-4dab-b476-95e7bdd49ef6" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; margin: 1.5em 0px; padding: 0px; text-align: center;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697163135.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697163135.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure><figure class="image" id="b02a3016-4a94-4d5d-858e-0317002f1fd6" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; margin: 1.5em 0px; padding: 0px; text-align: center;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697163277.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697163277.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure></li></ul><ul class="bulleted-list" id="2bb73855-3263-4feb-8d63-65884e26f14b" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">選擇建立好的通道,執行網頁即會出現外部URL<figure class="image" id="d54b6f09-534f-4a4e-b634-ed8132488d36" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; margin: 1.5em 0px; padding: 0px; text-align: center;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697163356.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697163356.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure><figure class="image" id="bcd9391e-663d-43ba-b972-aa5f01db1bd2" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; margin: 1.5em 0px; padding: 0px; text-align: center;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697163381.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697163381.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure></li></ul><h1 id="50873bfb-7c42-4851-808d-f7ff5b23a520" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space-collapse: preserve;">2. 非.Net Core程式 (.Net Framework)</h1><h2 id="ff0c856a-ba7e-4c77-a107-fb4644c5053d" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.5rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.5rem; white-space-collapse: preserve;">安裝 dev tunnels 程式</h2><ul class="bulleted-list" id="504f8ae1-4524-4e1d-9c7d-415276655944" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">裝完後<strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">重開機</strong>,環境變數位罝才會生效</li></ul><pre class="code code-wrap" id="da056606-7e46-4f71-be3d-847f66603ff9" style="-webkit-print-color-adjust: exact; background: rgba(135, 131, 120, 0.15); border-radius: 3px; box-sizing: border-box; color: #37352f; font-family: SFMono-Regular, Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace; font-size: 13.6px; padding: 1.5em 1em; tab-size: 2; text-wrap: wrap; word-break: break-all;"><code style="-webkit-print-color-adjust: exact; background: none; border-radius: 3px; box-sizing: border-box; color: inherit; font-size: 11.05px; padding: 0px; tab-size: 2;">winget install Microsoft.devtunnel</code></pre><h2 id="59e43ad5-0bf8-456c-b176-66029f17f98e" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.5rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.5rem; white-space-collapse: preserve;">登入</h2><ul class="bulleted-list" id="b6b52e36-96f3-4323-a33c-8263c395db26" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">第一次使用,需要登入Github或微軟帳號</li></ul><pre class="code code-wrap" id="b42a59f2-35b4-4aca-9cf4-f313138dbc27" style="-webkit-print-color-adjust: exact; background: rgba(135, 131, 120, 0.15); border-radius: 3px; box-sizing: border-box; color: #37352f; font-family: SFMono-Regular, Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace; font-size: 13.6px; padding: 1.5em 1em; tab-size: 2; text-wrap: wrap; word-break: break-all;"><code style="-webkit-print-color-adjust: exact; background: none; border-radius: 3px; box-sizing: border-box; color: inherit; font-size: 11.05px; padding: 0px; tab-size: 2;">devtunnel user login</code></pre><ul class="bulleted-list" id="2de97a93-ab5d-4371-9b47-e05a0b9975ed" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;"><figure class="image" id="c2f8daf5-6c9f-4fe4-89cd-9fdb74e25143" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; margin: 1.5em 0px; padding: 0px; text-align: center;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697160121.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697160121.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure></li></ul><ul class="bulleted-list" id="c61fbc99-9ea5-463d-a5dd-0e9817f3091a" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">執行本機程式,http port 50893 ps:<strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">不能使用https</strong><figure class="image" id="86c5a1e0-9296-450c-ab77-c795cf4d46f4" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; margin: 1.5em 0px; padding: 0px; text-align: center;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697162566.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697162566.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure></li></ul><ul class="bulleted-list" id="60e5916d-6ff6-462a-800a-13e55a845927" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">執行devtunnel 將本機程式公開,並允許匿使用者可以瀏覽</li></ul><pre class="code code-wrap" id="46e1ed4b-9215-4a18-a212-b7187fdd56eb" style="-webkit-print-color-adjust: exact; background: rgba(135, 131, 120, 0.15); border-radius: 3px; box-sizing: border-box; color: #37352f; font-family: SFMono-Regular, Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace; font-size: 13.6px; padding: 1.5em 1em; tab-size: 2; text-wrap: wrap; word-break: break-all;"><code style="-webkit-print-color-adjust: exact; background: none; border-radius: 3px; box-sizing: border-box; color: inherit; font-size: 11.05px; padding: 0px; tab-size: 2;">devtunnel host -p 50893 --allow-anonymous</code></pre><ul class="bulleted-list" id="c5938b0e-e85c-4237-bf88-826b0b5763c6" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">執行後,取得公開的URL,大功告成<figure class="image" id="aec5747c-9980-4bfb-b06a-cd759100bbf7" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; margin: 1.5em 0px; padding: 0px; text-align: center;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697162746.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697162746.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure><ul class="bulleted-list" id="3f8586b9-5b46-4c24-ae39-0e8fdfb2108a" style="-webkit-print-color-adjust: exact; box-sizing: border-box; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: circle; padding-left: 0.1em;">進入後按Continue<figure class="image" id="ffe0e5bc-a804-45d1-856e-2f8d8b04c667" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; margin: 1.5em 0px; padding: 0px; text-align: center;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697162714.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697162714.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure></li><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: circle; padding-left: 0.1em;"><div class="separator" style="clear: both; text-align: center;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697165346.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="169" data-original-width="389" height="169" src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/10/upgit_20231013_1697165346.png" width="389" /></a></div><br /></li></ul></li></ul><h1 id="4905538b-50a2-40d1-9da7-a8eb6c181f94" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space-collapse: preserve;"><br /></h1><h1 id="4905538b-50a2-40d1-9da7-a8eb6c181f94" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space-collapse: preserve;">Reference</h1><ul class="bulleted-list" id="71d53219-6303-4ab0-8b29-d376bb50fc11" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;"><a href="https://www.youtube.com/watch?v=kdaHwOkQf7c" style="-webkit-print-color-adjust: exact; box-sizing: border-box;">Dev Tunnels Visual Studio in 10 Minutes or Less</a></li></ul><ul class="bulleted-list" id="5be5d543-b074-4d06-ba63-adba42c76786" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;"><a href="https://www.youtube.com/watch?v=vrHz75qNQik" style="-webkit-print-color-adjust: exact; box-sizing: border-box;">董大偉使用DevTunnel取代NGROK</a></li></ul>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-24486401665631371682023-08-09T13:53:00.002+08:002023-08-09T13:53:40.600+08:00Cloudflare root to www<h1 class="" id="31060449-837b-4c4b-b6c7-509880e41d3b" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space-collapse: preserve;">前言</h1><p class="" id="22dc3d0f-4229-47b9-8c3d-f5e78459aa8e" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space-collapse: preserve;">工作有一需求,需要將root 導向www,例如: kimx.info to www.kimx.info 。此方式個人知道的解決方式,有2種: </p><p class="" id="e4a21e61-e690-4a24-bddd-b8a8476e58fd" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space-collapse: preserve;">1. 在IIS設定Rewrite。 </p><p class="" id="0e4d0a00-c308-4826-a6da-eea3da44bae2" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space-collapse: preserve;">2. 在DNS 服務商設定 (本文針對Cloudflare)。ps: 要看是否有支援。 </p><h1 class="" id="894cc3b0-3b66-4809-b438-2a48fdfbc41f" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space-collapse: preserve;">使用方式 </h1><p class="" id="fe2acd82-f62b-48eb-b313-248ae661bbd2" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space-collapse: preserve;">1. 如下圖,設定root 並啟用代理,此為給Cloudflare的Page Rule轉發用。</p><figure class="image" id="ce225e92-c80d-42bf-b436-dbd4d3ac6e54" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin: 1.5em 0px; padding: 0px; text-align: center; white-space-collapse: preserve;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/08/upgit_20230809_1691557770.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/08/upgit_20230809_1691557770.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure><p class="" id="79a36327-b09b-4ff3-be77-f52ec58811cd" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space-collapse: preserve;">2.設定Page Rule 將root 轉到www </p><div class="indented" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; padding-left: 1.5em; white-space-collapse: preserve;"><figure class="image" id="2efe1a24-c570-4602-a4e1-12d83bab2b20" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; margin: 1.5em 0px; padding: 0px; text-align: center;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/08/upgit_20230809_1691557697.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/08/upgit_20230809_1691557697.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure></div><p style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space-collapse: preserve;"></p><h1 class="" id="35fcd572-be16-4b5b-8e22-7603f0d05926" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space-collapse: preserve;"> 總結</h1><ul class="bulleted-list" id="bece5c51-3b7f-4269-9263-28be3b9eed32" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">這樣的設定比去IIS設定方便許多,省下Rewrite及Bining等設定,也比較好管理。</li></ul><h1 class="" id="bbead5c7-3530-4a95-98c9-bcb3f891f1b1" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space-collapse: preserve;">相關參考</h1><ul class="bulleted-list" id="d96d12f3-1177-4284-abfb-82a869c0841e" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">https://developers.cloudflare.com/support/page-rules/configuring-url-forwarding-or-redirects-with-page-rules/</li></ul>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-82632650106938379232023-07-18T15:21:00.001+08:002023-07-18T15:21:42.399+08:00發行前取得分支併入目前程式<h1 id="a9640a4c-0d83-423a-a034-9955fc058405" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space-collapse: preserve;"><strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">前言</strong></h1><p id="9fea0797-f608-41c0-892c-9d976efd2495" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space-collapse: preserve;">目前開發的專案,發行工作大部分是由CI來處理,但在某些狀況下,為求快速,會直接在Visual Studio上,發行到測試主機上。天下武功、唯快不破......,但"快"容易打破碗。</p><p id="53526384-0462-4d73-82f1-7d607e334768" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space-collapse: preserve;">今天同事A,在本機發行時,並未取得遠端開發分支來合併,導致同事B在測試時,發生鬼打牆事件。為避免之後還有此情況,在發行檔案內,加了一個發行前,先取得分支來合併的設定。</p><h1 id="5d00b099-181b-48f0-8eb4-47b2fc51697b" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space-collapse: preserve;"><strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">使用方式</strong></h1><p id="88df10f3-abfa-477e-8916-34dbe5bde933" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space-collapse: preserve;">打開.pubxml 增加如下</p><pre class="code code-wrap" id="7d1fa664-5300-42d6-8b8f-7d21accbfb86" style="-webkit-print-color-adjust: exact; background: rgba(135, 131, 120, 0.15); border-radius: 3px; box-sizing: border-box; color: #37352f; font-family: SFMono-Regular, Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace; font-size: 13.6px; padding: 1.5em 1em; tab-size: 2; text-wrap: wrap; word-break: break-all;"><code style="-webkit-print-color-adjust: exact; background: none; border-radius: 3px; box-sizing: border-box; color: inherit; font-size: 11.05px; padding: 0px; tab-size: 2;"> <PropertyGroup>
.......以上略
<PipelineDependsOn>
CustomActionsBeforeBuild;
$(PipelineDependsOn);
</PipelineDependsOn>
</PropertyGroup>
<Target Name="CustomActionsBeforeBuild" BeforeTargets="BeforeBuild">
<Message Text="********************************** BeforeBuild-發行前 取得遠端Main,合併到目前分支 ***********************************" Importance="high"/>
<Exec Command="git merge origin/main"/>
</Target>
</code></pre><h1 id="969b9295-07ce-458a-8e24-76fb1733d0b9" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space-collapse: preserve;"><strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">測試</strong></h1><p id="b9c74882-e9be-4b52-ace6-32ca24792156" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space-collapse: preserve;">發行程式,在"輸出"視窗,可以看到在建置時,觸發了commad的訊息。</p><figure class="image" id="40fec217-ee1c-4dec-bd23-057b97ce555d" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin: 1.5em 0px; padding: 0px; text-align: center; white-space-collapse: preserve;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/07/upgit_20230718_1689663883.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/07/upgit_20230718_1689663883.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure><h1 id="7a342de7-95a3-4cac-9eee-c7c06238ab8e" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space-collapse: preserve;"><strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">總結</strong></h1><ul class="bulleted-list" id="12e7b00a-23eb-42d0-b267-163e4b40a4c0" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">只要是人為的操作,難免會有操作錯誤的行為,所以可以透過設定自動化來解決的工作,可以省下日後不少麻煩。</li></ul><h1 id="9a086753-825c-4b0c-88c8-b9fa5ecd0a95" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space-collapse: preserve;"><strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">相關參考</strong></h1><ul class="bulleted-list" id="6672cf32-9725-4d1d-951f-82a0d0b0c000" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">https://stackoverflow.com/questions/35688836/how-to-redirect-powershell-errors-in-pubxml-file-to-error-window</li></ul><ul class="bulleted-list" id="631203a9-6426-4df7-874c-6d3e27644cac" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space-collapse: preserve;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">Github <a href="https://github.com/kimx/PublishBeforeBuildLab" style="-webkit-print-color-adjust: exact; box-sizing: border-box;">原始檔下載</a></li></ul>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-30074852973106424072023-03-10T14:50:00.004+08:002023-03-10T14:51:33.398+08:00.Net Core DateOnly Swagger及Dapper設定<h1 id="qian-yan" style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;">前言</h1><p style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 18px; margin-bottom: 1rem; margin-top: 0px;">之前在寫前端時,針對日期在處理前後端序列化時,需要因時區特性作一些處理,例如:在台灣主機,取得後端的Json都會+08:00,前端則需要作顯示或調整的處理(Long Story不多述訴。</p><p style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 18px; margin-bottom: 1rem; margin-top: 0px;">.Net Core 6 時代,就沒這煩惱了,直接使用DateOnly,前端得到的Json視為字串格式yyyy-MM-dd,送到後端也可以序列化成DateOnly型別。</p><h1 id="shi-yong-fang-shi" style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;">使用方式</h1><p style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 18px; margin-bottom: 1rem; margin-top: 0px;">以下針對目前正在開發的一個專案,所使用到的技術,針對DateOnly的設定調整。</p><ol style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 18px; margin-bottom: 1rem; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;">Swagger:加入MapType,告知DateOnly對應Json為string</li></ol><pre style="background: rgb(43, 48, 59); border-radius: 0.25rem; box-sizing: border-box; color: #c0c5ce; direction: ltr; font-family: "Fira Code", sfmono-regular, menlo, monaco, consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.875rem; margin-bottom: 2rem; margin-top: 2rem; overflow: auto; unicode-bidi: bidi-override;"><code style="border-radius: 0.25rem; box-sizing: border-box; color: inherit; direction: ltr; display: block; font-family: "Fira Code", sfmono-regular, menlo, monaco, consolas, "Liberation Mono", "Courier New", monospace; font-size: inherit; line-height: 1.5; overflow-wrap: break-word; overflow-x: auto; padding: 1.25rem 1.5rem; tab-size: 4; unicode-bidi: bidi-override; word-break: normal;"><span style="box-sizing: border-box;">builder.Services.AddSwaggerGen(c =>
</span><span style="box-sizing: border-box;">{...
</span><span style="box-sizing: border-box;"> c.MapType<DateOnly>(() => new OpenApiSchema { Format = "date", Type = "string" });
</span><span style="box-sizing: border-box;">});
</span></code></pre><p style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 18px; margin-bottom: 1rem; margin-top: 0px;">此設定為測試API時,對應正確的欄位,如下圖修改前/後<br style="box-sizing: border-box;" /><img alt="upgit_20230310_1678429711.png" src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/03/upgit_20230310_1678429711.png" style="box-sizing: border-box; height: auto; max-width: 100%; vertical-align: middle;" /></p><p style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 18px; margin-bottom: 1rem; margin-top: 0px;">2.Dapper: 加入TypeHandler,處理從資料庫取值及設定參數值</p><pre style="background: rgb(43, 48, 59); border-radius: 0.25rem; box-sizing: border-box; color: #c0c5ce; direction: ltr; font-family: "Fira Code", sfmono-regular, menlo, monaco, consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.875rem; margin-bottom: 2rem; margin-top: 2rem; overflow: auto; unicode-bidi: bidi-override;"><code style="border-radius: 0.25rem; box-sizing: border-box; color: inherit; direction: ltr; display: block; font-family: "Fira Code", sfmono-regular, menlo, monaco, consolas, "Liberation Mono", "Courier New", monospace; font-size: inherit; line-height: 1.5; overflow-wrap: break-word; overflow-x: auto; padding: 1.25rem 1.5rem; tab-size: 4; unicode-bidi: bidi-override; word-break: normal;"><span style="box-sizing: border-box;">public class DapperSqlDateOnlyTypeHandler : SqlMapper.TypeHandler<DateOnly>
</span><span style="box-sizing: border-box;">{
</span><span style="box-sizing: border-box;"> public override void SetValue(IDbDataParameter parameter, DateOnly date)
</span><span style="box-sizing: border-box;"> {
</span><span style="box-sizing: border-box;"> parameter.DbType = DbType.Date;
</span><span style="box-sizing: border-box;"> parameter.Value = date.ToDateTime(new TimeOnly(0, 0));
</span><span style="box-sizing: border-box;"> }
</span><span style="box-sizing: border-box;">
</span><span style="box-sizing: border-box;"> public override DateOnly Parse(object value)
</span><span style="box-sizing: border-box;"> {
</span><span style="box-sizing: border-box;"> var result = DateOnly.FromDateTime((DateTime)value);
</span><span style="box-sizing: border-box;"> return result;
</span><span style="box-sizing: border-box;"> }
</span><span style="box-sizing: border-box;">}
</span><span style="box-sizing: border-box;">
</span><span style="box-sizing: border-box;">//Program.cs
</span><span style="box-sizing: border-box;"> Dapper.SqlMapper.AddTypeHandler(new DapperSqlDateOnlyTypeHandler());
</span></code></pre><p style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 18px; margin-bottom: 1rem; margin-top: 0px;">以上設定,在Blazor InputDate繫結及叫用API,測試OK。</p><h1 id="zong-jie" style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;">總結</h1><ul style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 18px; margin-bottom: 1rem; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;">這樣在日期(不包含時間)的操作上,可以省下不少功夫以及避免一些時區序列/反序化問題。</li></ul><h1 id="xiang-guan-can-kao" style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;">相關參考</h1><ul style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 18px; margin-bottom: 1rem; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;"><a href="https://github.com/DapperLib/Dapper/issues/1715#issuecomment-1149665776" style="box-sizing: border-box; color: #5d2f86; text-decoration-line: none;">DapperSqlDateOnlyTypeHandler</a></li></ul><h1 id="nin-ke-neng-ye-hui-you-xing-qu-de-qi-ta-wen-zhang" style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;">您可能也會有興趣的其他文章</h1><ul style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 18px; margin-bottom: 1rem; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;"><a href="https://note.kimx.info/2017/05/web-api-swagger.html" style="box-sizing: border-box; color: #5d2f86; text-decoration-line: none;">Web API文件產生器-Swagger</a></li></ul><script id="stacks-wallet-provider" src="chrome-extension://ldinpeekobnhjjdofggfgjlcehhmanlj/inpage.js"></script><script id="stacks-wallet-provider" src="chrome-extension://ldinpeekobnhjjdofggfgjlcehhmanlj/inpage.js"></script>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-89047054768068495722023-01-16T11:51:00.004+08:002023-01-16T13:29:13.922+08:00使用Netlify發佈Obsidian筆記<h1 id="qian-yan" style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;">前言</h1><h1 id="qian-yan" style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;"><p style="box-sizing: border-box; font-size: 18px; font-weight: 400; margin-bottom: 1rem; margin-top: 0px;">寫好的Obsidian 筆記想要公開在網站分享給別人,目前我使用的有幾種方式:</p><ol style="box-sizing: border-box; font-size: 18px; font-weight: 400; margin-bottom: 1rem; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;">EverNote。</li><li style="box-sizing: border-box;">Notion。</li><li style="box-sizing: border-box;">Blogger。<br style="box-sizing: border-box;" />以上三種在過程中,都需要一些小調整。若筆記有修改,除了Blogger會更新,通常也不會再去更新已分享出去的筆記。 若不想要那麼麻煩,Obsidian也有付費方式,可以發行。</li></ol><p style="box-sizing: border-box; font-size: 18px; font-weight: 400; margin-bottom: 1rem; margin-top: 0px;">參考此篇<a href="https://beingpax.medium.com/7-obsidian-publish-alternatives-to-publish-your-notes-online-for-free-33db4fb06f5" style="box-sizing: border-box; color: #5d2f86; text-decoration-line: none;">10個如何將Obsidian公開在網路</a>,選定了一個功能較完整的版本,例如支援: Graphic 、左方選單、筆記之間的連結等。</p></h1><h1 id="jia-gou" style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;">架構</h1><h1 style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;"><ul style="box-sizing: border-box; font-size: 18px; font-weight: 400; margin-bottom: 1rem; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;">使用Netlify靜態網站,免費、支援自訂網域。<ul style="box-sizing: border-box; margin-bottom: 0px; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;">個人使用起來比Github Page好用,易上手。</li></ul></li><li style="box-sizing: border-box;">網站樣板<a href="https://github.com/ppeetteerrs/obsidian-zola/tree/main" style="box-sizing: border-box; color: #5d2f86; text-decoration-line: none;">obsidian-zola</a>,透過javascript,將Obsidian筆記變成Html網頁顯示。</li><li style="box-sizing: border-box;">Github,你的Obsidian儲存庫。<ul style="box-sizing: border-box; margin-bottom: 0px; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;">你原本的Obsdian不用作修改,只需加一個netlify.toml即可。</li></ul></li></ul></h1><h1 id="shi-yong-fang-shi" style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;">使用方式</h1><h1 style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;"><ol style="box-sizing: border-box; font-size: 18px; font-weight: 400; margin-bottom: 1rem; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;">在Github建一個新的Repository,將你Obsidian要公開的筆記及.obsidian資料夾複製過來,並新增檔案<span style="box-sizing: border-box; font-weight: bolder;">Home.md</span>及<span style="box-sizing: border-box; font-weight: bolder;">netlify.toml</span>,如下圖所示</li></ol><ul style="box-sizing: border-box; font-size: 18px; font-weight: 400; margin-bottom: 1rem; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;"><img alt="upgit_20230116_1673834658.png" src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230116_1673834658.png" style="box-sizing: border-box; height: auto; max-width: 100%; vertical-align: middle;" /></li><li style="box-sizing: border-box;">Home.md 不用修改,只是作為入口首頁。</li><li style="box-sizing: border-box;">neltify.toml 修改參數:<ul style="box-sizing: border-box; margin-bottom: 0px; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;">REPO_URL : Github 位置</li><li style="box-sizing: border-box;">SITE_URL: netlify的URL</li></ul></li></ul><pre style="background: rgb(43, 48, 59); border-radius: 0.25rem; box-sizing: border-box; color: #c0c5ce; direction: ltr; font-family: "Fira Code", sfmono-regular, menlo, monaco, consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.875rem; font-weight: 400; margin-bottom: 2rem; margin-top: 2rem; overflow: auto; unicode-bidi: bidi-override;"><code style="border-radius: 0.25rem; box-sizing: border-box; color: inherit; direction: ltr; display: block; font-family: "Fira Code", sfmono-regular, menlo, monaco, consolas, "Liberation Mono", "Courier New", monospace; font-size: inherit; line-height: 1.5; overflow-wrap: break-word; overflow-x: auto; padding: 1.25rem 1.5rem; tab-size: 4; unicode-bidi: bidi-override; word-break: normal;"><span style="box-sizing: border-box;">[build]
</span><span style="box-sizing: border-box;">command = "rm -rf __obsidian __site && mkdir __obsidian && mv * __obsidian || true && git clone https://github.com/ppeetteerrs/obsidian-zola.git __site && __site/run.sh"
</span><span style="box-sizing: border-box;">publish = "public"
</span><span style="box-sizing: border-box;">
</span><span style="box-sizing: border-box;">[build.environment]
</span><span style="box-sizing: border-box;">LANDING_BUTTON = "進入我的大腦"
</span><span style="box-sizing: border-box;">LANDING_TITLE = "首頁標題"
</span><span style="box-sizing: border-box;">LANDING_DESCRIPTION = "首頁副標題"
</span><span style="box-sizing: border-box;"># 首面的筆記名稱
</span><span style="box-sizing: border-box;">LANDING_PAGE = "home"
</span><span style="box-sizing: border-box;">PYTHON_VERSION = "3.8"
</span><span style="box-sizing: border-box;"># 你的Github儲存庫
</span><span style="box-sizing: border-box;">REPO_URL = "https://github.com/kimx/NetlifyObsidianLab"
</span><span style="box-sizing: border-box;">SITE_TITLE = "網站標題"
</span><span style="box-sizing: border-box;"># (Optional) Site title in browser tab (leave blank to use SITE_TITLE)
</span><span style="box-sizing: border-box;">SITE_TITLE_TAB = "Kimxinfo"
</span><span style="box-sizing: border-box;"># (REQUIRED) Netlify site URL
</span><span style="box-sizing: border-box;">SITE_URL = "https://kimxinfo-netlifyobsidianlab.netlify.app/"
</span><span style="box-sizing: border-box;"># (Optional) Site Timezone
</span><span style="box-sizing: border-box;">TIMEZONE = "Asia/Hong_Kong"
</span><span style="box-sizing: border-box;">ZOLA_VERSION = "0.15.2"
</span><span style="box-sizing: border-box;">SORT_BY = "title"
</span><span style="box-sizing: border-box;"># (Optional) Google Analytics Measurement ID
</span><span style="box-sizing: border-box;">GANALYTICS = ""
</span><span style="box-sizing: border-box;"># (Optional, default true) Slugify URLs. Put "" to disable.
</span><span style="box-sizing: border-box;">SLUGIFY = "y"
</span><span style="box-sizing: border-box;"># (Optional, default true) Shows knowledge graph on home page. Put "" to disable.
</span><span style="box-sizing: border-box;">HOME_GRAPH = "y"
</span><span style="box-sizing: border-box;"># (Optional, default true) Shows knowledge graph on every page. Put "" to disable.
</span><span style="box-sizing: border-box;">PAGE_GRAPH = "y"
</span><span style="box-sizing: border-box;"># 左方選單是否展開
</span><span style="box-sizing: border-box;">SIDEBAR_COLLAPSED = ""
</span><span style="box-sizing: border-box;"># 頁尾資訊
</span><span style="box-sizing: border-box;">FOOTER = ""
</span><span style="box-sizing: border-box;"># (Optional, default main) Root section name.
</span><span style="box-sizing: border-box;">ROOT_SECTION_NAME = "main"
</span><span style="box-sizing: border-box;"># (Optional) visjs graph options. Can remove if desired.
</span><span style="box-sizing: border-box;">GRAPH_OPTIONS = """
</span><span style="box-sizing: border-box;"> {
</span><span style="box-sizing: border-box;"> nodes: {
</span><span style="box-sizing: border-box;"> shape: "dot",
</span><span style="box-sizing: border-box;"> color: isDark() ? "#8c8e91" : "#dee2e6",
</span><span style="box-sizing: border-box;"> font: {
</span><span style="box-sizing: border-box;"> face: "Inter",
</span><span style="box-sizing: border-box;"> color: isDark() ? "#c9cdd1" : "#616469",
</span><span style="box-sizing: border-box;"> strokeColor: isDark() ? "#c9cdd1" : "#616469",
</span><span style="box-sizing: border-box;"> },
</span><span style="box-sizing: border-box;"> scaling: {
</span><span style="box-sizing: border-box;"> label: {
</span><span style="box-sizing: border-box;"> enabled: true,
</span><span style="box-sizing: border-box;"> },
</span><span style="box-sizing: border-box;"> },
</span><span style="box-sizing: border-box;"> },
</span><span style="box-sizing: border-box;"> edges: {
</span><span style="box-sizing: border-box;"> color: { inherit: "both" },
</span><span style="box-sizing: border-box;"> width: 0.8,
</span><span style="box-sizing: border-box;"> smooth: {
</span><span style="box-sizing: border-box;"> type: "continuous",
</span><span style="box-sizing: border-box;"> },
</span><span style="box-sizing: border-box;"> hoverWidth: 4,
</span><span style="box-sizing: border-box;"> },
</span><span style="box-sizing: border-box;"> interaction: {
</span><span style="box-sizing: border-box;"> hover: true,
</span><span style="box-sizing: border-box;"> },
</span><span style="box-sizing: border-box;"> height: "100%",
</span><span style="box-sizing: border-box;"> width: "100%",
</span><span style="box-sizing: border-box;"> physics: {
</span><span style="box-sizing: border-box;"> solver: "repulsion",
</span><span style="box-sizing: border-box;"> },
</span><span style="box-sizing: border-box;"> }
</span><span style="box-sizing: border-box;"> """
</span></code></pre><ol start="2" style="box-sizing: border-box; font-size: 18px; font-weight: 400; margin-bottom: 1rem; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;">使用Github註冊<a href="https://www.netlify.com/" style="box-sizing: border-box; color: #5d2f86; text-decoration-line: none;">Netlify</a>,加入新網站,選擇匯入來源Github<img alt="upgit_20230113_1673594927.png" src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230113_1673594927.png" style="box-sizing: border-box; height: auto; max-width: 100%; vertical-align: middle;" /></li></ol><ul style="box-sizing: border-box; font-size: 18px; font-weight: 400; margin-bottom: 1rem; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;">匯進去時,會自動配給你一個URL,可以在Site settings修改,或者是使用你自己的Domain。<img alt="upgit_20230113_1673595030.png" src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230113_1673595030.png" style="box-sizing: border-box; height: auto; max-width: 100%; vertical-align: middle;" /></li><li style="box-sizing: border-box;">本文設定為kimxinfo-netlifyobsidianlab,URL為https://kimxinfo-netlifyobsidianlab.netlify.app/</li><li style="box-sizing: border-box;">此URL要回填到neltify.toml的<span style="box-sizing: border-box; font-weight: bolder;">SITE_URL</span>參數上。</li></ul><ol start="3" style="box-sizing: border-box; font-size: 18px; font-weight: 400; margin-bottom: 1rem; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;">簽入Github後,會觸發建置,成功後自動部署。</li><li style="box-sizing: border-box;">檢視網站,點中間Button進入首頁 <img alt="upgit_20230113_1673595449.png" src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230113_1673595449.png" style="box-sizing: border-box; height: auto; max-width: 100%; vertical-align: middle;" /><br style="box-sizing: border-box;" /><img alt="upgit_20230113_1673595512.png" src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230113_1673595512.png" style="box-sizing: border-box; height: auto; max-width: 100%; vertical-align: middle;" /><br style="box-sizing: border-box;" />ps: 小小缺點,左方選單,只會有一層,所有子目錄,都會被拉到第一層,無法搜尋中文。</li></ol></h1><h1 id="zong-jie" style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;">總結</h1><h1 style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;"><ul style="box-sizing: border-box; font-size: 18px; font-weight: 400; margin-bottom: 1rem; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;">透過這樣的方式,可以更快速、更方便管理Obsidian的分享筆記。</li><li style="box-sizing: border-box;">可以在網頁上,使用大部分Obsidian的功能。</li></ul></h1><h1 id="qi-ta" style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;">其他</h1><h1 style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;"><ul style="box-sizing: border-box; font-size: 18px; font-weight: 400; margin-bottom: 1rem; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;">Netlify自訂Domain,<a href="https://docs.netlify.com/domains-https/custom-domains/configure-external-dns/#configure-a-subdomain" style="box-sizing: border-box; color: #5d2f86; text-decoration-line: none;">參考此篇</a>,加一筆cname到dns。</li></ul></h1><h1 id="xiang-guan-can-kao" style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;">相關參考</h1><h1 style="background-color: white; box-sizing: border-box; color: #1d2d35; font-family: Inter, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 2.5rem; line-height: 1.2; margin: 2rem 0px 1.125rem;"><ul style="box-sizing: border-box; font-size: 18px; font-weight: 400; margin-bottom: 1rem; margin-top: 0px; padding-left: 2rem;"><li style="box-sizing: border-box;"><a href="https://blog.alantsai.net/posts/2018/07/migrate-blog-to-ssg-demo-devops-8-netlify-free-static-site-hosting-service" style="box-sizing: border-box; color: #5d2f86; text-decoration-line: none;">netlify 超佛心的靜態網站hosting服務</a></li><li style="box-sizing: border-box;"><a href="https://github.com/kimx/NetlifyObsidianLab" style="box-sizing: border-box; color: #5d2f86; text-decoration-line: none;">此筆記的Github位置</a></li></ul></h1>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-48734175701425071622023-01-12T16:06:00.004+08:002023-01-12T16:06:19.986+08:00Obsidian DataviewJs的應用<p><span style="color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; white-space: pre-wrap;"><b>Foreword</b></span></p><ul class="bulleted-list" id="fe824b93-a3a3-4382-9deb-3a22dd299437" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">DataviewJs為Dataview的更進一步應用,使用javascript撰寫。</li></ul><ul class="bulleted-list" id="22cecf0d-7399-4a76-b075-77f050f05b5e" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">筆記示範,如何使用DataviewJs並結合CustomJs讓取得Tasks的方式可以在多個筆記引用。 </li></ul><h1 class="" id="fd6b6fcc-09fc-43d7-8a22-49725b35ad2e" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space: pre-wrap;">Content </h1><h2 class="" id="5260049d-7a43-4396-acfe-41d8861127a5" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.5rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.5rem; white-space: pre-wrap;">安裝PlugIn CustomJs</h2><ul class="bulleted-list" id="6d5cdced-633d-4559-94b3-927344a896f6" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">指定js的資料夾</li></ul><figure class="image" id="b3aa0611-b3ee-4e6b-8c2d-dfaaae1c1f07" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin: 1.5em 0px; padding: 0px; text-align: center; white-space: pre-wrap;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230112_1673508473.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230112_1673508473.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure><h2 class="" id="5bfa9b3b-b5a0-4cad-9b80-2bc9fee86ca7" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.5rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.5rem; white-space: pre-wrap;">撰寫 MyTask.js</h2><ul class="bulleted-list" id="9d6d56c4-7420-4de0-ace2-d564a8ad7dd5" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">取得所有<strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">未完成的工作</strong>,並濾掉不需要的<strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">資料夾</strong>及<strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">header</strong></li></ul><pre class="code code-wrap" id="060d7ee2-e1ed-4d02-bee3-d4a957c93974" style="-webkit-print-color-adjust: exact; background: rgba(135, 131, 120, 0.15); border-radius: 3px; box-sizing: border-box; color: #37352f; font-family: SFMono-Regular, Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace; font-size: 13.6px; padding: 1.5em 1em; tab-size: 2; white-space: pre-wrap; word-break: break-all;"><code style="-webkit-print-color-adjust: exact; background: none; border-radius: 3px; box-sizing: border-box; color: inherit; font-size: 11.05px; padding: 0px; tab-size: 2;">class MyTask {
getTasks(dv) {
let tasks = dv.pages().where((f) => f.file.path.indexOf("60.Extra") == -1).file.tasks;
tasks = tasks.where(
(t) => !t.completed
&& t.section.subpath.indexOf("Routine") == -1
);
tasks.sort((t) => t.due);
return tasks;
}
}</code></pre><ul class="bulleted-list" id="11a3dd34-7fdb-4059-81ed-20f40b69e256" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">完成後放到資料夾 60.Extra/67.Assets/js</li></ul><h2 class="" id="2c490fb0-cee3-4e29-964a-5ca29f19dc78" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.5rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.5rem; white-space: pre-wrap;">DataviewJs顯示Tasks</h2><ul class="bulleted-list" id="ce2b8f8b-c9c2-4f46-80b5-c4bb6388e9dc" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">透過customJs 使用MyTask,並呼叫getTasks取得待處理工作。</li></ul><ul class="bulleted-list" id="a838ffda-5689-4aab-bd09-c5e9be8748d9" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">針對<strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">各狀態</strong>過濾,顯示<strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">標題及Tasks</strong>。</li></ul><ul class="bulleted-list" id="10c8c1a2-6392-4308-b4ca-4f0a83072b08" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">若要顯示結果,將dataviewjs-<strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">marked</strong>,的<strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">-marked</strong>移除。</li></ul><pre class="code code-wrap" id="89dbb883-5b97-40fd-9b79-a47009be765e" style="-webkit-print-color-adjust: exact; background: rgba(135, 131, 120, 0.15); border-radius: 3px; box-sizing: border-box; color: #37352f; font-family: SFMono-Regular, Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace; font-size: 13.6px; padding: 1.5em 1em; tab-size: 2; white-space: pre-wrap; word-break: break-all;"><code style="-webkit-print-color-adjust: exact; background: none; border-radius: 3px; box-sizing: border-box; color: inherit; font-size: 11.05px; padding: 0px; tab-size: 2;">const isDue =(t)=>{
var result= moment(new Date(t.due)).isBefore(moment(),"day");
return result;
}
const isToday =(t)=>{
var result= moment(new Date(t.due)).isSame(moment(),"day");
return result;
}
const isUpcoming =(t)=>{
var result= moment(new Date(t.due)).isAfter(moment(),"day");
return result;
}
const isUndated =(t)=>{
return t.due == null;
}
const {MyTask} = customJS;
let tasks=MyTask.getTasks(dv);
tasks.sort(t=>t.due);
dv.header(2,"🗓️本日待辦");
dv.taskList(tasks.filter(t=>isToday(t)),true)
dv.header(2,"🗓️過期待辦");
dv.taskList(tasks.filter(t=>isDue(t)),true)
dv.header(2,"🗓️未來待辨");
dv.taskList(tasks.filter(t=>isUpcoming(t)),true)
dv.header(2,"🗓️未排程");
dv.taskList(tasks.filter(t=>isUndated(t)),true)</code></pre><p class="" id="13a7ba64-3a06-4b75-ad17-3894cfafac1d" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space: pre-wrap;">
</p><h1 class="" id="30e1b20e-47b3-49b3-a19e-47db79a56a59" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space: pre-wrap;">Reference</h1><ul class="bulleted-list" id="a1322532-7290-4660-8bb2-1a38927dd8e7" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;"><a href="https://forum-zh.obsidian.md/t/topic/5954" style="-webkit-print-color-adjust: exact; box-sizing: border-box;">Dataviewjs的奇技淫巧</a></li></ul><ul class="bulleted-list" id="d439d70e-6ac9-400a-b15f-d21094abd47e" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;"><a href="https://github.com/saml-dev/obsidian-custom-js" style="-webkit-print-color-adjust: exact; box-sizing: border-box;">CustomJs</a></li></ul><ul class="bulleted-list" id="c5514213-4e26-41a0-885d-018f779c2308" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;"><a href="https://blacksmithgu.github.io/obsidian-dataview/annotation/metadata-pages/" style="-webkit-print-color-adjust: exact; box-sizing: border-box;">Dataview 官方欄位說明-Page</a> </li></ul><ul class="bulleted-list" id="eef9306d-5d91-4f88-a125-e96df1a2a93e" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;"><a href="https://blacksmithgu.github.io/obsidian-dataview/annotation/metadata-tasks/#field-shorthands" style="-webkit-print-color-adjust: exact; box-sizing: border-box;">Dataview 官方欄位說明-Task</a> </li></ul><ul class="bulleted-list" id="6adbadc0-bbe1-464b-8875-0227ec0a4c1f" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;"><a href="https://github.com/blacksmithgu/obsidian-dataview/discussions/547#discussioncomment-3214417" style="-webkit-print-color-adjust: exact; box-sizing: border-box;">DataviewJs如何針對Header過濾</a> </li></ul><ul class="bulleted-list" id="184e6aae-74a2-45a5-a501-0de6c4f0e807" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;"><a href="https://github.com/blacksmithgu/obsidian-dataview/discussions/547#discussioncomment-3214417" style="-webkit-print-color-adjust: exact; box-sizing: border-box;">DataviewJs如何針對Header過濾</a></li></ul><div id="gtx-trans" style="left: 180px; position: absolute; top: -20px;"><div class="gtx-trans-icon"></div></div>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-67385514172994379182023-01-11T15:14:00.008+08:002023-01-16T17:27:41.423+08:00git 修改最後一次的commit<p> <span face="ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"" style="color: #37352f; font-size: 1.875rem; letter-spacing: -0.01em; white-space: pre-wrap;">前言</span></p><p id="781d8a4c-a634-4d6a-84ce-b63d16bf39d9" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space: pre-wrap;">你是否會常commit了變更後,發現少寫了什麼或某段程式寫錯了,然後就會修改後,再commit一次,假設你又跟我一樣常犯傻,剛的情況又來一次的話, history就會長得如下3個commit,多了v2,v3 。</p><figure class="image" id="e5fc6ac6-c148-48f8-a759-230c4a537995" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin: 1.5em 0px; padding: 0px; text-align: center; white-space: pre-wrap;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230111_1673418098.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230111_1673418098.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure><h1 id="eb724a7d-206c-42b2-a79e-a6c3ca2d81ca" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space: pre-wrap;">解決方法</h1><p id="bce21241-13d0-485b-a964-f192efad645b" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space: pre-wrap;">針對commit了,又後悔想修改的話,針對幾個情境的解決方式。 </p><h2 style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; text-align: left; white-space: pre-wrap;">1. 修改/新增併入最近的commit <br /></h2><p id="466654e9-c781-4e8a-a645-54b3e18af7f2" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space: pre-wrap;">如前言所述,最近的commit為“訂單新增API v3”,如圖,我想再將修改內容,併入v3的commit。</p><figure class="image" id="5e8265f1-9550-46e5-a44c-2d69023936f5" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin: 1.5em 0px; padding: 0px; text-align: center; white-space: pre-wrap;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230111_1673418942.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230111_1673418942.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure><h3 id="63a0af28-3c66-4569-a21b-b8eebfa2eae4" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.25rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.25rem; white-space: pre-wrap;">使用方式</h3><ol class="numbered-list" id="9dbf2110-491f-437b-8638-e15223443508" start="1" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.6em; white-space: pre-wrap;" type="1"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; padding-left: 0.2em;">將修改的先加入暫存區 (同Visual Studio 加入到stage) </li></ol><pre class="code" id="7823e6a3-f3da-4187-8f52-a0a32f6173c5" style="-webkit-print-color-adjust: exact; background: rgba(135, 131, 120, 0.15); border-radius: 3px; box-sizing: border-box; color: #37352f; font-family: SFMono-Regular, Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace; font-size: 13.6px; padding: 1.5em 1em; tab-size: 2;"><code style="-webkit-print-color-adjust: exact; background: none; border-radius: 3px; box-sizing: border-box; color: inherit; font-size: 11.05px; padding: 0px; tab-size: 2;">git add --all</code></pre><ol class="numbered-list" id="dd493eea-92a1-4ce2-b336-f8fe7c0157c9" start="2" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.6em; white-space: pre-wrap;" type="1"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; padding-left: 0.2em;">簽入加上參數 –amend –no-edit </li></ol><pre class="code" id="377657cc-d4a8-447c-a79f-b990ff0342c9" style="-webkit-print-color-adjust: exact; background: rgba(135, 131, 120, 0.15); border-radius: 3px; box-sizing: border-box; color: #37352f; font-family: SFMono-Regular, Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace; font-size: 13.6px; padding: 1.5em 1em; tab-size: 2;"><code style="-webkit-print-color-adjust: exact; background: none; border-radius: 3px; box-sizing: border-box; color: inherit; font-size: 11.05px; padding: 0px; tab-size: 2;">git commit --amend --no-edit</code></pre><ul class="bulleted-list" id="29751e49-5b9a-480a-9ef7-364b74252b8b" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">-–amend: 將暫存區的加入最近一次的commit</li></ul><ul class="bulleted-list" id="dab84968-d391-45b1-ba2e-807c98a8ac52" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">-–no-eidt: 不需要commit message commit沒有增加,但內容已由v3變成 <strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">v3-1</strong><figure class="image" id="c002e72e-4e99-432c-b2aa-b9611b7efd96" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; margin: 1.5em 0px; padding: 0px; text-align: center;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230111_1673419666.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230111_1673419666.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure></li></ul><h2 id="cf2e9567-3db7-4503-a771-da7108fdfffb" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.5rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.5rem; white-space: pre-wrap;">2.修改最近commit的訊息</h2><p id="c6c7e4c6-c190-4b69-beb2-51986a84c732" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space: pre-wrap;">有時簽入時,才發現訊息寫錯了,想修改該如何做? 本例示範將“訂單新增API v3” 改成“訂單新增API v3 <strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">OK</strong>” </p><h3 id="a5a3f139-65e7-4a54-9b39-8447e7cde9a8" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.25rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.25rem; white-space: pre-wrap;">使用方式 </h3><p id="cdd11825-dcfd-45c6-8cca-c78b3f84c38e" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space: pre-wrap;">簽入加上參數 --amend <strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">-m</strong> 參數 </p><pre class="code" id="bfba616a-ebd7-41ff-8ef0-3379e8d4cab2" style="-webkit-print-color-adjust: exact; background: rgba(135, 131, 120, 0.15); border-radius: 3px; box-sizing: border-box; color: #37352f; font-family: SFMono-Regular, Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace; font-size: 13.6px; padding: 1.5em 1em; tab-size: 2;"><code style="-webkit-print-color-adjust: exact; background: none; border-radius: 3px; box-sizing: border-box; color: inherit; font-size: 11.05px; padding: 0px; tab-size: 2;">git commit --amend -m “訂單新增API v3 OK”</code></pre><p id="d7a4e9e3-ce63-4b68-92f6-234d9b1fafb7" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space: pre-wrap;">一樣是3個commit,但最後一個訊息已加上“OK”</p><figure class="image" id="bfdbcfbc-3e32-4281-bf4a-9fda45841896" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin: 1.5em 0px; padding: 0px; text-align: center; white-space: pre-wrap;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230111_1673420127.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230111_1673420127.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure><h2 id="42d339cb-9dfb-4465-a2a7-2e6bc48c1e1f" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.5rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.5rem; white-space: pre-wrap;">注意事項</h2><p id="8c276d79-2dff-4772-a431-fabfb143011c" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space: pre-wrap;">上述的兩種方式,其實都是撒掉前一次的commit,再換一個新的commit,仔細看的話,ID是不一樣的。在本地的commit可以任意使用,但針對<strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">已push出去的commit</strong>,儘量<strong style="-webkit-print-color-adjust: exact; box-sizing: border-box;">不要這樣用</strong>,以免造成別人在處理衝突的困擾。</p><h1 id="83dd12ca-19c3-4096-9457-26104690ddc5" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space: pre-wrap;">總結</h1><p id="150f4a59-8903-4900-86d4-d3b9ce103482" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space: pre-wrap;">以上兩個指令,可以大量減少一些不必要的commit,讓整個歷史記錄更清楚明瞭。</p><p id="150f4a59-8903-4900-86d4-d3b9ce103482" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space: pre-wrap;">白話文:可以簽了又簽、簽了又簽,還是一個commit。</p><h1 id="d45d6063-05d4-42c5-8317-f4d31e974ae9" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space: pre-wrap;">相關參考</h1><ul class="bulleted-list" id="74433ced-ba8c-4ad8-ba49-8ae75b2751fc" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;"><a href="https://note.kimx.info/2020/12/git.html" style="-webkit-print-color-adjust: exact; box-sizing: border-box;">git 修改歷史訊息</a></li></ul>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-72518748563265153022023-01-05T17:11:00.002+08:002023-01-05T17:13:47.820+08:00Obsidian 上傳圖片到Github<h1 id="18c8bd0e-9a71-4e13-88ff-cc295f2e196d" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space: pre-wrap;">前言</h1><p id="dccbb9d1-e574-4187-8789-6473369f0b1f" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space: pre-wrap;">在Obsidian將複製的圖片貼到筆記裡時,照預設的方式,會放到相對應或你指定的本機目錄內。目前有些筆記需要分享出去或公開的Blog,在轉出去的過程,針對那些在本機的圖片,需要再處理一次,轉成網路的位置,處理一次就令我頭痛了。所以之後的筆記只要是插入圖片,都是來自網路資源。</p><p id="79129edd-34ec-483a-81b0-8d822e9a698a" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space: pre-wrap;">插入來自網路圖片,代表著勢必要先上傳到網路某個空間,且支援公開的靜態資源,然後取得URL,再放到筆記內…..這個作法,太土炮,作個幾次,就想翻筆電了XD。 本文會介紹如何在寫筆記的過程,將複製的圖片貼到筆記時,先上傳圖片到Github上,並取得圖片在Github上公開的URL,貼到筆記內。</p><h1 id="1a6fb04d-96db-41d9-bcf1-60edd5f72402" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space: pre-wrap;">如何使用</h1><h2 id="d13fd7ba-c604-42f0-adec-344a03af87c1" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.5rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.5rem; white-space: pre-wrap;">前置設定</h2><ol class="numbered-list" id="7c860b3f-ca0d-4ac8-a94b-7c819fa4d015" start="1" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.6em; white-space: pre-wrap;" type="1"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; padding-left: 0.2em;">先到Gitthub建立一個respository,本文: ObsidianAssets。</li></ol><ol class="numbered-list" id="c94e1097-5749-4525-b8c8-20591e15581a" start="2" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.6em; white-space: pre-wrap;" type="1"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; padding-left: 0.2em;">到 <a href="https://github.com/settings/tokens" style="-webkit-print-color-adjust: exact; box-sizing: border-box;">Github個人設定</a>,建立Token ,只會顯示1次,要保存好。<ul class="bulleted-list" id="691ae54d-8a9c-42f8-8c65-61ffbdab53bb" style="-webkit-print-color-adjust: exact; box-sizing: border-box; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;"><figure class="image" id="a3ea857e-8638-45df-b603-d7a88ebf85e0" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; margin: 1.5em 0px; padding: 0px; text-align: center;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230105_1672907943.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230105_1672907943.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure></li></ul></li></ol><ol class="numbered-list" id="85dbd043-3b7b-4770-9e91-a0e674bce2d7" start="3" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.6em; white-space: pre-wrap;" type="1"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; padding-left: 0.2em;"><a href="https://github.com/pluveto/upgit/releases" style="-webkit-print-color-adjust: exact; box-sizing: border-box;">下載Upgit</a>,upgit_win_amd64.exe(windows),放到你指定的位置,例如:D:.exe</li></ol><ol class="numbered-list" id="f01b3858-64aa-4602-bbfb-7b5efde71bde" start="4" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.6em; white-space: pre-wrap;" type="1"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; padding-left: 0.2em;">在剛的位置,新增新增config.toml,並將github的資訊填入</li></ol><pre class="code code-wrap" id="a4a1dbd2-8b59-4709-a323-e28970e034d7" style="-webkit-print-color-adjust: exact; background: rgba(135, 131, 120, 0.15); border-radius: 3px; box-sizing: border-box; color: #37352f; font-family: SFMono-Regular, Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace; font-size: 13.6px; padding: 1.5em 1em; tab-size: 2; white-space: pre-wrap; word-break: break-all;"><code style="-webkit-print-color-adjust: exact; background: none; border-radius: 3px; box-sizing: border-box; color: inherit; font-size: 11.05px; padding: 0px; tab-size: 2;"># 預設上傳者
default_uploader = "github"
# 圖片位置設定
rename = "{year}/{month}/upgit_{year}{month}{day}_{unix_ts}{ext}"
[output_formats]
"bbcode" = "[img]{url}[/img]"
"html" = '<img src="{url}" />'
"markdown-simple" = "![]({url})"
# Github 上傳者
[uploaders.github]
# 保存文件的分支,例如 master 或 main
branch = "master"
pat = "你的Token"
# 您的respository
repo = "ObsidianAssets"
# 您的 Gtihub 用户名
username = "kimx"</code></pre><ol class="numbered-list" id="b31aee87-c5e8-44fb-992f-8c7b3f1fe8e3" start="1" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.6em; white-space: pre-wrap;" type="1"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; padding-left: 0.2em;">設定好後,先測試command,是否可以上傳,成功的話,會以markdown格式存在你的剪貼簿上。</li></ol><pre class="code code-wrap" id="111eedaf-f6f5-44f0-baa5-eac7bf2369e1" style="-webkit-print-color-adjust: exact; background: rgba(135, 131, 120, 0.15); border-radius: 3px; box-sizing: border-box; color: #37352f; font-family: SFMono-Regular, Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace; font-size: 13.6px; padding: 1.5em 1em; tab-size: 2; white-space: pre-wrap; word-break: break-all;"><code style="-webkit-print-color-adjust: exact; background: none; border-radius: 3px; box-sizing: border-box; color: inherit; font-size: 11.05px; padding: 0px; tab-size: 2;">D:\obsiaian\tools\upgit.exe :clipboard -f markdown</code></pre><h2 id="8edc68f4-c938-4852-ad0e-2935ee512007" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.5rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.5rem; white-space: pre-wrap;">Obsidian設定</h2><ol class="numbered-list" id="d4a4a659-1b2a-408f-93c7-706e59e2239c" start="1" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.6em; white-space: pre-wrap;" type="1"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; padding-left: 0.2em;">安裝PlugIn : Shell Command。</li></ol><ol class="numbered-list" id="2176539c-dbd2-4f9e-b1b6-f5aa751d0101" start="2" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.6em; white-space: pre-wrap;" type="1"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; padding-left: 0.2em;">設定Shell<ul class="bulleted-list" id="a59cf8a1-3a1d-45d3-b3ab-0fbd54eb4d00" style="-webkit-print-color-adjust: exact; box-sizing: border-box; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">設定Commnad [[Pasted image 20230105165541.png]]</li></ul><ul class="bulleted-list" id="38d6cd14-130e-4476-9174-7200b93df874" style="-webkit-print-color-adjust: exact; box-sizing: border-box; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">點選工具圖示,設定Output,指定到目前位置<figure class="image" id="13292add-d24d-478a-8628-86a27d32ac2e" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; margin: 1.5em 0px; padding: 0px; text-align: center;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230105_1672909056.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230105_1672909056.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure></li></ul><ul class="bulleted-list" id="e80f1612-9660-4962-a32e-0bb7e4d2f542" style="-webkit-print-color-adjust: exact; box-sizing: border-box; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;">最後指定快捷鍵ALT+ V<figure class="image" id="f938988e-58a4-4d7f-99f2-cb2d28483253" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; margin: 1.5em 0px; padding: 0px; text-align: center;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230105_1672909124.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230105_1672909124.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure></li></ul></li></ol><ol class="numbered-list" id="5943b849-30c0-4782-bdaa-c411f0b540f1" start="3" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.6em; white-space: pre-wrap;" type="1"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; padding-left: 0.2em;">大功告成,此時你按ALR+V就可以直接將剪貼簿的圖片,上傳到github上,並以markdown格式插入,如下圖。<figure class="image" id="5cfc7721-46f3-4acf-baf2-cc2a4256e72d" style="-webkit-print-color-adjust: exact; border-radius: 0px; border: none; box-sizing: border-box; break-inside: avoid; margin: 1.5em 0px; padding: 0px; text-align: center;"><a href="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230105_1672909375.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box;"><img src="https://raw.githubusercontent.com/kimx/ObsidianAssets/master/2023/01/upgit_20230105_1672909375.png" style="-webkit-print-color-adjust: exact; box-sizing: border-box; max-width: 100%;" /></a></figure></li></ol><h1 id="f056586a-d689-4e01-a0c3-aee442cb14dc" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space: pre-wrap;">總結</h1><p id="1b89c572-aca0-4503-8948-5640b9a0b42a" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space: pre-wrap;">透過這樣的方式,未來你的筆記,只要是有支援markdown格式的,就可以無痛接軌的分享出去。</p><p id="1b89c572-aca0-4503-8948-5640b9a0b42a" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-bottom: 0.5em; margin-top: 0.5em; white-space: pre-wrap;">ps:本文的圖片也是以<b>此方式上傳</b>的。</p><h1 id="fabf0638-d255-4576-b9d4-58a1a617b55a" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.875rem; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 0px; margin-top: 1.875rem; white-space: pre-wrap;">參考來源</h1><ul class="bulleted-list" id="76f69c40-adfb-4dd8-ba7e-bda201ecf070" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;"><a href="http://jdev.tw/blog/6982" style="-webkit-print-color-adjust: exact; box-sizing: border-box;">文章</a></li></ul><ul class="bulleted-list" id="933c1fb9-1ead-4509-9aa4-bc86112b2c1f" style="-webkit-print-color-adjust: exact; box-sizing: border-box; color: #37352f; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; margin-block: 0.6em; margin: 0px; padding-inline-start: 1.7em; white-space: pre-wrap;"><li style="-webkit-print-color-adjust: exact; box-sizing: border-box; list-style: disc; padding-left: 0.1em;"><a href="https://www.youtube.com/watch?v=nGII-khqm2o" style="-webkit-print-color-adjust: exact; box-sizing: border-box;">影片教學</a></li></ul><div id="gtx-trans" style="left: 148px; position: absolute; top: 1868.95px;"><div class="gtx-trans-icon"></div></div>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-71528786193856869642022-12-15T10:49:00.004+08:002022-12-16T08:27:46.354+08:00.Net Core 使用反向代理-YARP<div style="border-width: 0px!important; border: 0px; color: transparent; display: none; font-size: 0px; line-height: 0px; margin: 0px; max-height: 1px; opacity: 0; padding: 0px; visibility: hidden; width: 1px;"><img alt="" border="0" height="1" src="http://t.mail-svc.evernote.com/q/cWkbeEjklZrRbeX7YEfduA~~/AADd_wA~/RgRlfQ_tPVcDc3BjQgpjkO2KmmPjNrHFUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" width="1" /></div> <div class="ennote"><div><span style="font-size: 12pt;"><span style="color: #1aade0;">前言</span></span></div><div>在參考Clearn Architecture時,看到的一個有趣的東東 YARP 反向代理套件,用來實作Api Gateway架構(如下圖),將多個微服務集合起來,對外統一端點、負載平載、壓縮、緩存等。</div><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhIzXbaeOh2ycIGUDQ8QLKqKLyY5Fb4KieXAkb7rJpT9HPsufCBBTA5UQJn5uMMQFy6T_Mbd1TwCHv792WtHZCktFh9E3GIkDNOJhIE7wILSIemZXxlZBh07T0dGaLGglrLrQ5M0nd_3ex_zFLt8HiNMjzafLRmBc4yhvHWdT2kEbMs6VlbsTP_uNse"><img border="0" id="BLOGGER_PHOTO_ID_7177201730822147218" src="https://blogger.googleusercontent.com/img/a/AVvXsEhIzXbaeOh2ycIGUDQ8QLKqKLyY5Fb4KieXAkb7rJpT9HPsufCBBTA5UQJn5uMMQFy6T_Mbd1TwCHv792WtHZCktFh9E3GIkDNOJhIE7wILSIemZXxlZBh07T0dGaLGglrLrQ5M0nd_3ex_zFLt8HiNMjzafLRmBc4yhvHWdT2kEbMs6VlbsTP_uNse=s16000" /></a><div>圖片來源:微軟電子書</div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">什麼是YARP</span></span></div><div> 微軟開源的專案,運用 .NET (.NET Core) 建置高效能反向代理,Y特點是容易自訂,用戶可以根據需求,自訂並且調整成來滿足特殊場景的需求。</div><div>提供了兩個主要使用和自訂的方向,第一個是作為一個全功能代理;另一種使用方式,則是將 YARP 用於高度自定義的環境,用戶可以直接呼叫 YARP 請求轉送程式,繞過路由和負載平衡等模組。開發者甚至可以在同一個程序中混合兩種方式,根據路由切換。(<a href="http://t.mail-svc.evernote.com/f/a/WrkrHjyQaN33QL9PSW9D7w~~/AADd_wA~/RgRlfQ_tP0QtaHR0cHM6Ly93d3cuc2xpZGVzaGFyZS5uZXQvdHdNVkMvdHdtdmM0My15YXJwVwNzcGNCCmOQ7YqaY-M2scVSGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~">參考來源twMVC</a>)</div><div><span style="font-size: 12pt;"><span style="color: #1aade0;"><span style="--en-markholder: true;"><br /></span></span></span></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">POC實作</span></span></div><div>本文將新增一個ApiGatewary專案及2個WebAPI專案,由ApiGatewary統一對外存取WebAPI。</div><div><br /></div><div>1.新增ApiGatewary 專案</div><div>加入套件</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>Install-Package Yarp.ReverseProxy -Version 1.1.1</div></div><div>Program.cs 啟用YARP</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>builder.Services.AddReverseProxy() </div><div> .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));</div><div>..</div><div>app.MapReverseProxy();</div></div><div><br /></div><div>2.新增 WebAPI專案-Product 回傳產品資訊</div><div>https://localhost:7298/api/products/Product</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div> [Route("api/products/[controller]")] </div><div> public class ProductController : ControllerBase </div><div> { </div><div> [HttpGet] </div><div> public IEnumerable<Product> Get() </div><div> { </div><div> List<Product> products = GeTestData(); </div><div> return products; </div><div> }</div><div>..</div><div>...略</div></div><div><br /></div><div>3.新增 WebAPI專案-Order 回傳訂單資訊</div><div>https://localhost:7033/api/orders/Order</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div> [Route("api/orders/[controller]")] </div><div> public class OrderController : ControllerBase </div><div> { </div><div> [HttpGet()] </div><div> public IEnumerable<Order> Get() </div><div> { </div><div> List<Order> orders = GetTestData(); </div><div> return orders; </div><div> }</div><div>...略</div></div><div><br /></div><div>4.ApiGatewary 加入組態</div><ul><li><div>Routes :對外的端點路由</div></li><ul><li><div>Transforms :將match的路徑,轉成實際對應WebAPI的路徑。例如:對外端點 /product-api/ 轉成api/products</div></li></ul><li><div>Clusters : 路由匹配的目前主機</div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/lZyLiy6H1b8G_Mexp2mN_A~~/AADd_wA~/RgRlfQ_tP0RCaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL3JldmVyc2UtcHJveHkvYXJ0aWNsZXMvdHJhbnNmb3Jtcy5odG1sVwNzcGNCCmOQ7YqaY-M2scVSGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~">組態說明文件</a></div></li></ul><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div> "ReverseProxy": { </div><div> "Routes": { </div><div> "productsRoute": { </div><div> "ClusterId": "productsCluster", </div><div> "Match": { </div><div> "Path": "/product-api/{**catch-all}" </div><div> }, </div><div> "Transforms": [ </div><div> { "PathRemovePrefix": "/product-api" }, </div><div> { "PathPrefix": "/api/products" }, </div><div> { "RequestHeadersCopy": "true" }, </div><div> { "RequestHeaderOriginalHost": "true" } </div><div> ] </div><div> }, </div><div> "ordersRoute": { </div><div> "ClusterId": "ordersCluster", </div><div> "Match": { </div><div> "Path": "/order-api/{**catch-all}" </div><div> }, </div><div> "Transforms": [ </div><div> { "PathRemovePrefix": "/order-api" }, </div><div> { "PathPrefix": "/api/orders" }, </div><div> { "RequestHeadersCopy": "true" }, </div><div> { "RequestHeaderOriginalHost": "true" } </div><div> ] </div><div> } </div><div> }, </div><div> "Clusters": { </div><div> "productsCluster": { </div><div> "Destinations": { </div><div> "destination1": { </div><div> "Address": "https://localhost:7298/" </div><div> } </div><div> } </div><div> }, </div><div> "ordersCluster": { </div><div> "Destinations": { </div><div> "destination1": { </div><div> "Address": "https://localhost:7033/" </div><div> } </div><div> } </div><div> } </div><div> } </div><div> }</div></div><ul><li><div>組態也可以在Runtime時,使用程式配置,自訂Provider,<a href="http://t.mail-svc.evernote.com/f/a/nktMjLvvyVCjLe6ouA3iog~~/AADd_wA~/RgRlfQ_tP0RZaHR0cHM6Ly9tZWRpdW0uY29tL3N3bGgvYnVpbGRpbmctYS1mYXN0LWFuZC1yZWxpYWJsZS1yZXZlcnNlLXByb3h5LXdpdGgteWFycC00ZjcwZGFmNDczMDBXA3NwY0IKY5Dtippj4zaxxVIZa2lteGluZm8ubm90ZUBibG9nZ2VyLmNvbVgEAAAABg~~">完整請參考</a></div></li></ul><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div> builder.Services.AddSingleton<IProxyConfigProvider>(new CustomProxyConfigProvider())</div></div><div><br /></div><div><span style="font-size: 12pt;">5.測試程式,透過ApiGateway 連到對應的WebApi</span></div><div><span style="font-size: 12pt;">Product : <a href="http://t.mail-svc.evernote.com/f/a/4c1h6sCXepa9rZkOOgmf1A~~/AADd_wA~/RgRlfQ_tP0QqaHR0cHM6Ly9sb2NhbGhvc3Q6NzA0MC9wcm9kdWN0LWFwaS9wcm9kdWN0VwNzcGNCCmOQ7YqaY-M2scVSGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~">https://localhost:7040/product-api/product</a></span></div><div><span style="font-size: 12pt;">Order : <a href="http://t.mail-svc.evernote.com/f/a/2sdV-SwH-obpTzHdF2KpBA~~/AADd_wA~/RgRlfQ_tP0QmaHR0cHM6Ly9sb2NhbGhvc3Q6NzA0MC9vcmRlci1hcGkvb3JkZXJXA3NwY0IKY5Dtippj4zaxxVIZa2lteGluZm8ubm90ZUBibG9nZ2VyLmNvbVgEAAAABg~~">https://localhost:7040/order-api/order</a></span></div><div><span style="font-size: 12pt;"><span style="--en-markholder: true;"><br /></span></span></div><div><span style="font-size: 12pt;"><a href="http://t.mail-svc.evernote.com/f/a/jtQpN4Or_1zjMokSUPeSbA~~/AADd_wA~/RgRlfQ_tP0QlaHR0cHM6Ly9naXRodWIuY29tL2tpbXgvQXBpR2F0ZVdheUxhYlcDc3BjQgpjkO2KmmPjNrHFUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG">範例程式</a></span></div><div><span style="font-size: 12pt;"><span style="--en-markholder: true;"><br /></span></span></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">其它/參考</span></span></div><ul><li><div><a href="http://t.mail-svc.evernote.com/f/a/KdNaUu6m6VCYih4JJ6JcrQ~~/AADd_wA~/RgRlfQ_tP0Q3aHR0cHM6Ly9naXRodWIuY29tL3RoYW5nY2h1bmcvY2xlYW4tYXJjaGl0ZWN0dXJlLWRvdG5ldFcDc3BjQgpjkO2KmmPjNrHFUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG">clean-architecture-dotnet</a></div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/Mb4REOWmM-BSub2DryCgiQ~~/AADd_wA~/RgRlfQ_tP0QyaHR0cHM6Ly93d3cudHdibG9ncy5uZXQvYS82MDY1NWQzOTc1M2I2YWRhYmY2ZDI1MDVXA3NwY0IKY5Dtippj4zaxxVIZa2lteGluZm8ubm90ZUBibG9nZ2VyLmNvbVgEAAAABg~~" rev="en_rl_none">YARP 組態設定實作EF及UI</a></div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/Hg89bdalJR7Kb-AYdHEEhQ~~/AADd_wA~/RgRlfQ_tP0QqaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9yZXZlcnNlLXByb3h5VwNzcGNCCmOQ7YqaY-M2scVSGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~">YARP Github</a></div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/WrkrHjyQaN33QL9PSW9D7w~~/AADd_wA~/RgRlfQ_tP0QtaHR0cHM6Ly93d3cuc2xpZGVzaGFyZS5uZXQvdHdNVkMvdHdtdmM0My15YXJwVwNzcGNCCmOQ7YqaY-M2scVSGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~">twMVC#43 YARP</a><img src="https://www.evernote.com/etpa/3b1e2884-6d09-4bad-9719-3cbe51153c25" style="height: 1px; width: 1px;" /> <img alt="" border="0" height="1" src="http://t.mail-svc.evernote.com/q/WhXfOnFqNUC1uliX5I3Xxw~~/AADd_wA~/RgRlfQ_tPlcDc3BjQgpjkO2KmmPjNrHFUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" width="1" /></div></li></ul></div>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-31358713169189529722022-11-17T15:24:00.003+08:002022-11-17T15:25:10.178+08:00Application Insights 整合NLog<div style="border-width: 0px!important; border: 0px; color: transparent; display: none; font-size: 0px; line-height: 0px; margin: 0px; max-height: 1px; opacity: 0; padding: 0px; visibility: hidden; width: 1px;"><img alt="" border="0" height="1" src="http://t.mail-svc.evernote.com/q/VxnwaxvLXis30Mbh3fAIEg~~/AADd_wA~/RgRlWGVMPVcDc3BjQgpjdEzgdWMDrs0uUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" width="1" /></div> <div class="ennote"><div><span style="font-size: 12pt;"><span style="color: #1aade0;">前言</span></span></div><div> 這兩天將寫好的LineBot程式部署到Azure上測試,過程中發生錯誤及功能無法成功執行時候,要檢查是什麼原因? 頓覺寸步難行,沒有記錄可以查詢......也不知該如何查XD。花了些功夫,將這塊補上。</div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">Application Insight - 啟用</span></span></div><ul><li><div>App Service --> Application Insights 啟用。</div></li><ul><li><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgq6KqA5CtXrVmXbMsI70ExnBp8cchCp3d0iUpQnCLCoFSBDXzZ5_DU3RV8Wo3W7paGOGmP63ybeRtw-1IajIUfE0UrD0AtnHSwvfzluqcey2F31lLrbMmH8pO2zxrOeVONoektxN6jKGhQL8SvAdtUjPxgJV1Hz1FjQQWczVJcfdLlI-VZeW9Zm2Gp"><img border="0" id="BLOGGER_PHOTO_ID_7166881020228419762" src="https://blogger.googleusercontent.com/img/a/AVvXsEgq6KqA5CtXrVmXbMsI70ExnBp8cchCp3d0iUpQnCLCoFSBDXzZ5_DU3RV8Wo3W7paGOGmP63ybeRtw-1IajIUfE0UrD0AtnHSwvfzluqcey2F31lLrbMmH8pO2zxrOeVONoektxN6jKGhQL8SvAdtUjPxgJV1Hz1FjQQWczVJcfdLlI-VZeW9Zm2Gp=s16000" /></a><br /><br /></li></ul><li><div>啟用後,此時程式不用任何修改,只要有Request就可以在Azure上的Application Insights Transaction search查詢基本的資訊。</div></li><ul><li><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjRICU0aZqrV-OR6tvqrRdlqYHIdh3mouexEumeboxo22DFz7GwmsLl5G3LCPtbiSp63DC5Yh7Jdsa4q5Nz39oN1Tux9jZxNR3tu2G9ep-26EQdbIYZWA1ZkEkkOXetewM5_PSyjuqSLCTU9exNtIuVtKqHXfAcBaDClBSyVWIyqaAn2mqX-SPXLhMD"><img border="0" id="BLOGGER_PHOTO_ID_7166881032190032082" src="https://blogger.googleusercontent.com/img/a/AVvXsEjRICU0aZqrV-OR6tvqrRdlqYHIdh3mouexEumeboxo22DFz7GwmsLl5G3LCPtbiSp63DC5Yh7Jdsa4q5Nz39oN1Tux9jZxNR3tu2G9ep-26EQdbIYZWA1ZkEkkOXetewM5_PSyjuqSLCTU9exNtIuVtKqHXfAcBaDClBSyVWIyqaAn2mqX-SPXLhMD=s16000" /></a></li></ul></ul><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">Application Insight - 程式修改</span></span></div><ul><li><div>nuget參考 : Microsoft.ApplicationInsights.AspNetCore</div></li><li><div>Program.cs </div></li></ul><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>builder.Services.AddApplicationInsightsTelemetry();</div></div><ul><li><div>appsettings.json 加入連線字串 (在Applicaiton Insights 頁面取得)</div></li><ul><li><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhlF1cHipvDqvzxNTbNbwT9_XWyB6q5c_yAOKDhuGtDgvVrinnlIt4LJVt1AxJ6v_xBXZ0b-BB6F7rhOaPC5hkPg5rg0bmWL6Fy_Nx09_2F_BV-WXRsuQbfStM1SORy2Cj4pbdkj79TYDB7YqmJHDUFMB5J_2DqpvuOPp-5iA5tYKmK0VYX-S5Khnzd"><img border="0" id="BLOGGER_PHOTO_ID_7166881045704633906" src="https://blogger.googleusercontent.com/img/a/AVvXsEhlF1cHipvDqvzxNTbNbwT9_XWyB6q5c_yAOKDhuGtDgvVrinnlIt4LJVt1AxJ6v_xBXZ0b-BB6F7rhOaPC5hkPg5rg0bmWL6Fy_Nx09_2F_BV-WXRsuQbfStM1SORy2Cj4pbdkj79TYDB7YqmJHDUFMB5J_2DqpvuOPp-5iA5tYKmK0VYX-S5Khnzd=s16000" /></a><br /><br /></li></ul></ul><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div> "ApplicationInsights": { </div><div> "ConnectionString": "Your Connection String" </div><div> }</div></div><ul><li><div>此時你在本機測試(任何Request),可以在Azure上的Application Insights Transaction search查詢</div></li><li><div>或在Visual Studio查詢</div></li><ul><li><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhe_Np_Q2SEgV9oMfWVIrviNNKXPkTznt7zbjzmuSY-tvo7M7OYU6kS8rEzprXjcOXJrsZaDOjVo7e1qFmM5Z_c8BxM4xVbCuRRghAzShMWdBhZ_9MYfPhxLN3WbdW8peR6WPk7EcVKsegYltj8UrpU6Bg1BYrscNg7lV-UeofiJyNg9s8SxlKrn0WM"><img border="0" id="BLOGGER_PHOTO_ID_7166881058415252002" src="https://blogger.googleusercontent.com/img/a/AVvXsEhe_Np_Q2SEgV9oMfWVIrviNNKXPkTznt7zbjzmuSY-tvo7M7OYU6kS8rEzprXjcOXJrsZaDOjVo7e1qFmM5Z_c8BxM4xVbCuRRghAzShMWdBhZ_9MYfPhxLN3WbdW8peR6WPk7EcVKsegYltj8UrpU6Bg1BYrscNg7lV-UeofiJyNg9s8SxlKrn0WM=s16000" /></a><div><br /></div></li></ul></ul><div><span style="font-size: 12pt;"><span style="color: #1aade0;">Application Insight-搭配NLog</span></span></div><ul><li><div>加入nuget參考 </div></li><ul><li><div>NLog.Web.AspNetCore</div></li><li><div>Microsoft.ApplicationInsights.NLogTarget</div></li></ul><li><div>新增NLog.config 設定如下,<b><instrumentationKey> 須換成你的 </b>,instrumentationKey在跟你取得ConnectionStrings同一位置。</div></li><ul><li><div>設定內容:寫入檔案及Application Insights,並忽略開發時期的一堆底層資訊。</div></li></ul></ul><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div><?xml version="1.0" encoding="utf-8"?> </div><div><nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="false" </div><div> xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> </div><div> <extensions> </div><div> <add assembly="Microsoft.ApplicationInsights.NLogTarget" /> </div><div> <add assembly="NLog.Web.AspNetCore"/> </div><div> </extensions> </div><div> <variable name="layoutDefine" </div><div> value="${longdate} [${event-properties:item=EventId_Id:whenEmpty=0}][${level:padding=-5}] ${message} ${exception:format=tostring} (${callsite:includeNamespace=false:fileName=true:includeSourcePath=false})" /> </div><div> <targets> </div><div> <!---預設所有資訊先寫到Trace--> </div><div> <target xsi:type="Trace" name="TraceOutput" rawWrite="true" layout="${layoutDefine}" /> </div><div> <!---寫到Console--> </div><div> <target xsi:type="Console" name="lifetimeConsole" layout="${MicrosoftConsoleLayout}" /> </div><div> <!--寫入檔案--> </div><div> <target name="NLogFile" xsi:type="File" </div><div> layout="${longdate}-[${level}]-${logger}:${message} ${exception:format=tostring}" </div><div> fileName="${aspnet-appbasepath}\wwwroot\Logs\current_.log" </div><div> archiveFileName="${aspnet-appbasepath}\wwwroot\Logs\{#}_.log" </div><div> maxArchiveFiles="10" encoding="utf-8" archiveDateFormat="yyyyMMdd" archiveNumbering="Date" archiveEvery="Day" </div><div> /> </div><div> <!--寫入Application Insights--> </div><div> </div><div> <target type="ApplicationInsightsTarget" name="aiTarget" > </div><div> <instrumentationKey>換成你的</instrumentationKey> </div><div> </target></div><div> </targets> </div><div> <rules> </div><div> <!---預設所有資訊先寫到Trace--> </div><div> <logger name="*" writeTo="TraceOutput" /> </div><div> <!--Host資訊寫到Console --> </div><div> <logger name="Microsoft.Hosting.Lifetime" minlevel="Info" writeTo="lifetimeConsole" final="true" /> </div><div> <!--略過微軟及Http相關資訊,避免寫入下方的NLogFile --> </div><div> <logger name="Microsoft.*" maxlevel="Info" final="true" /> </div><div> <logger name="System.Net.Http.*" maxlevel="Info" final="true" /> </div><div> <logger name="*" minlevel="Info" writeTo="aiTarget" /> </div><div> <logger name="*" minlevel="Info" writeTo="NLogFile" /> </div><div> </rules> </div><div></nlog></div></div><div><br /></div><ul><li><div>使用LogFilter針對Web API每個Action作記錄</div></li></ul><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>public class LogFilter : IActionFilter </div><div>{ </div><div> private ILogger<LogFilter> _log; </div><div> public LogFilter(ILogger<LogFilter> log) </div><div> { </div><div> _log = log; </div><div> } </div><div> public void OnActionExecuting(ActionExecutingContext context) </div><div> { </div><div> try </div><div> { </div><div> string json = JsonSerializer.Serialize(context.ActionArguments); </div><div> _log.LogInformation($"{context.ActionDescriptor.DisplayName},{json}"); </div><div> } </div><div> catch (Exception ex) </div><div> { </div><div> _log.LogDebug($"{context.ActionDescriptor.DisplayName},{ex}"); </div><div> } </div><div> }</div><div> public void OnActionExecuted(ActionExecutedContext context) </div><div> { </div><div> } </div><div>}</div></div><ul><li><div>Program.cs 引用</div></li></ul><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>builder.Services.AddControllersWithViews(options => </div><div>{ </div><div> options.Filters.Add<LogFilter>(); </div><div>})</div></div><ul><li><div>Application Insights Transaction search查詢時,會出現在Type 為Trace,如下寫入查詢,測試的幾筆資料在Trace,Level=<b>Information</b>,如下圖紅框,使用Logger記錄的Action Name及參數內容。</div></li></ul><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhY7A2rcLaiJ_eyDghuYzs_2hbIBqXKAVGWGi5XWppwfbRbku-krYYcEr3zaCl7b0GvQ7L-qmfGQsAY5p_SNmlUwIa4EahQ75NEzxkTBOJJ6SckPmzkXszbCe75ShK4CHRsbmbnQt4j8rs2alXQOlc4EBh0CWtAWxWrlUOSrWhESnEaG3T2QUYih99S"><img border="0" id="BLOGGER_PHOTO_ID_7166881065074359186" src="https://blogger.googleusercontent.com/img/a/AVvXsEhY7A2rcLaiJ_eyDghuYzs_2hbIBqXKAVGWGi5XWppwfbRbku-krYYcEr3zaCl7b0GvQ7L-qmfGQsAY5p_SNmlUwIa4EahQ75NEzxkTBOJJ6SckPmzkXszbCe75ShK4CHRsbmbnQt4j8rs2alXQOlc4EBh0CWtAWxWrlUOSrWhESnEaG3T2QUYih99S=s16000" /></a><div><br /></div><div>記錄若是LogError(例外),則Type=Exception</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgUdLW1JJWVxU3iarIcYPirDQtu6wbDLuh-VnOfoEO2t3NCu8wmJxB9WCzkmn0qIEXOQrOfXHWpkCGds8fPajucm0hNB8dXamRAOSWXI5Se1WxKrseRSNwbS3y6Jn-k89wKdk1GVBrNmCPLTvSngKulL3kOvdG99DomN8WuyAr9kfz9MzDqQxooKupN" style="margin-left: 1em; margin-right: 1em;"><img data-original-height="521" data-original-width="722" src="https://blogger.googleusercontent.com/img/a/AVvXsEgUdLW1JJWVxU3iarIcYPirDQtu6wbDLuh-VnOfoEO2t3NCu8wmJxB9WCzkmn0qIEXOQrOfXHWpkCGds8fPajucm0hNB8dXamRAOSWXI5Se1WxKrseRSNwbS3y6Jn-k89wKdk1GVBrNmCPLTvSngKulL3kOvdG99DomN8WuyAr9kfz9MzDqQxooKupN=s16000" /></a></div><br /><br /></div><div>查詢的Request,若有再呼叫其他Request,本例在收到Request後,再呼叫Line API</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEggwkjCTm_5E_sikQLkWZP41iMR4FA5AlBHH-MHCvXT__84TC-JMifzSsB6toPkS_QiJLgzbfuqysTzmc7Ct5XVE68cvJm6Gb1b1KHoxnm2tRHg5wC8bHcD99YCHpjZyymCyBltw5kOAoe119ZSVYmgcEKMass_pKZ-t1qpWz1L4LWJkzCHTaAnswkO" style="margin-left: 1em; margin-right: 1em;"><img data-original-height="416" data-original-width="1127" src="https://blogger.googleusercontent.com/img/a/AVvXsEggwkjCTm_5E_sikQLkWZP41iMR4FA5AlBHH-MHCvXT__84TC-JMifzSsB6toPkS_QiJLgzbfuqysTzmc7Ct5XVE68cvJm6Gb1b1KHoxnm2tRHg5wC8bHcD99YCHpjZyymCyBltw5kOAoe119ZSVYmgcEKMass_pKZ-t1qpWz1L4LWJkzCHTaAnswkO=s16000" /></a></div><br /><br /></div><ul><li><div>使用Logs 作進階查詢,類似SQL語法</div></li></ul><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi7yTJwTLoD8EORpOkYBpBStROKf85mScGjdZW7xoZCAPHotKlIGt1kJvJhbCSREabfqaPoBNIulp9KKUpJkCHnioolYeEa8iSFlyrFpVDzY6bWtvHv17PfXIDV-nsScdmNYipmWrhCctX034oF84x9MQJhW9HLtMfSElXeMU7PcWTuHXCK6wwlGGOu" style="margin-left: 1em; margin-right: 1em;"><img data-original-height="534" data-original-width="822" src="https://blogger.googleusercontent.com/img/a/AVvXsEi7yTJwTLoD8EORpOkYBpBStROKf85mScGjdZW7xoZCAPHotKlIGt1kJvJhbCSREabfqaPoBNIulp9KKUpJkCHnioolYeEa8iSFlyrFpVDzY6bWtvHv17PfXIDV-nsScdmNYipmWrhCctX034oF84x9MQJhW9HLtMfSElXeMU7PcWTuHXCK6wwlGGOu=s16000" /></a></div><br /><br /></div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">其它參考</span></span></div><ul><li><div>Application insights記錄預設保留90天。</div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/58JFoobvAVduilOX2eVMtw~~/AADd_wA~/RgRlWGVMP0RCaHR0cHM6Ly9henVyZS5taWNyb3NvZnQuY29tL3poLXR3L3ByaWNpbmcvZGV0YWlscy9tb25pdG9yLyNwcmljaW5nVwNzcGNCCmN0TOB1YwOuzS5SGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~" rev="en_rl_none">定價頁面</a> :隨用隨付,算流量,每個月1G 約130元台幣。</div></li><ul><li><div><a href="http://t.mail-svc.evernote.com/f/a/aWGEN-blY9fVYryQsYY82w~~/AADd_wA~/RgRlWGVMP0REaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL3poLXR3L2F6dXJlL2F6dXJlLW1vbml0b3IvbG9ncy9kYWlseS1jYXBXA3NwY0IKY3RM4HVjA67NLlIZa2lteGluZm8ubm90ZUBibG9nZ2VyLmNvbVgEAAAABg~~" rev="en_rl_none">設定每日上限</a></div></li></ul><li><div><a href="http://t.mail-svc.evernote.com/f/a/NLYsT7m301NPl1DjHkHxJQ~~/AADd_wA~/RgRlWGVMP0QiaHR0cHM6Ly9naXRodWIuY29tL2tpbXgvTGluZWJvdFBvY1cDc3BjQgpjdEzgdWMDrs0uUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" rev="en_rl_none">本文範例</a></div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/bNTrzfjraP6yeBFB10zqNg~~/AADd_wA~/RgRlWGVMP0Q0aHR0cHM6Ly9kb3RibG9ncy5jb20udHcvYWxiZXJ0c2hlbi8yMDE5LzAxLzMxLzE2MDAyOVcDc3BjQgpjdEzgdWMDrs0uUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" rev="en_rl_none">https://dotblogs.com.tw/albertshen/2019/01/31/160029</a></div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/EjimqtHfXhemn6vbFOQMAw~~/AADd_wA~/RgRlWGVMP0RHaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL3poLXR3L2F6dXJlL2F6dXJlLW1vbml0b3IvYXBwL3Zpc3VhbC1zdHVkaW9XA3NwY0IKY3RM4HVjA67NLlIZa2lteGluZm8ubm90ZUBibG9nZ2VyLmNvbVgEAAAABg~~" rev="en_rl_none">https://learn.microsoft.com/zh-tw/azure/azure-monitor/app/visual-studio</a></div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/a4b5DnjB-N5MSIJkSV9TEw~~/AADd_wA~/RgRlWGVMP0QxaHR0cHM6Ly9ub3RlLmtpbXguaW5mby8yMDIyLzExL25ldC1jb3JlLW5sb2cuaHRtbFcDc3BjQgpjdEzgdWMDrs0uUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" rev="en_rl_none">KIm'Note .Net Core 使用NLog</a><img src="https://www.evernote.com/etpa/858a64d4-061b-4bbe-933c-f75c3c9ea300" style="height: 1px; width: 1px;" /> <img alt="" border="0" height="1" src="http://t.mail-svc.evernote.com/q/UnMu-0f2fI-c62djd1f5SQ~~/AADd_wA~/RgRlWGVMPlcDc3BjQgpjdEzgdWMDrs0uUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" width="1" /></div></li></ul></div>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-5217490657071376182022-11-17T13:32:00.003+08:002022-11-17T17:03:06.066+08:00.Net Core 使用NLog<div style="border-width: 0px!important; border: 0px; color: transparent; display: none; font-size: 0px; line-height: 0px; margin: 0px; max-height: 1px; opacity: 0; padding: 0px; visibility: hidden; width: 1px;"><img alt="" border="0" height="1" src="http://t.mail-svc.evernote.com/q/_CTsBLmO-I8ISehXdl0KBg~~/AADd_wA~/RgRlWEv2PVcDc3BjQgpjdPbGdWMnbdGfUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" width="1" /></div> <div class="ennote"><div><span style="font-size: 12pt;"><span style="color: #1aade0;"> </span></span>之前.Net Framework時使用的NLog,到了.Net Core後,使用方式有點不同,整理如下。</div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">加入套件</span></span></div><ul><li><div>NLog</div></li><li><div>NLog.Web.AspNetCore</div></li></ul><div><span style="font-size: 12pt;"><span style="color: #1aade0;"><span style="--en-markholder: true;"><br /></span></span></span></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">新增NLog.config檔案</span></span></div><div>設定檔已針對Microsoft及Hosting等略過及Conosle處理</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div><?xml version="1.0" encoding="utf-8"?> </div><div><nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="false" </div><div> xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> </div><div> <extensions> </div><div> <add assembly="Microsoft.ApplicationInsights.NLogTarget" /> </div><div> <add assembly="NLog.Web.AspNetCore"/> </div><div> </extensions> </div><div> <variable name="layoutDefine" </div><div> value="${longdate} [${event-properties:item=EventId_Id:whenEmpty=0}][${level:padding=-5}] ${message} ${exception:format=tostring} (${callsite:includeNamespace=false:fileName=true:includeSourcePath=false})" /> </div><div> </div><div> <targets> </div><div> <!---預設所有資訊先寫到Trace--> </div><div> <target xsi:type="Trace" name="TraceOutput" rawWrite="true" layout="${layoutDefine}" /> </div><div> <!---寫到Console--> </div><div> <target xsi:type="Console" name="lifetimeConsole" layout="${MicrosoftConsoleLayout}" /> </div><div> </div><div> <!--寫入檔案--> </div><div> <target name="NLogFile" xsi:type="File" </div><div> layout="${longdate}-[${level}]-${logger}:${message} ${exception:format=tostring}" </div><div> fileName="${aspnet-appbasepath}\wwwroot\Logs\current_.log" </div><div> archiveFileName="${aspnet-appbasepath}\wwwroot\Logs\{#}_.log" </div><div> maxArchiveFiles="10" encoding="utf-8" archiveDateFormat="yyyyMMdd" archiveNumbering="Date" archiveEvery="Day" </div><div> /> </div><div> </div><div> <!--寫入Application Insights--> </div><div> <!--<target type="ApplicationInsightsTarget" name="aiTarget" />--> </div><div> </targets> </div><div> <rules> </div><div> <!---預設所有資訊先寫到Trace--> </div><div> <logger name="*" writeTo="TraceOutput" /> </div><div> <!--Host資訊寫到Console --> </div><div> <logger name="Microsoft.Hosting.Lifetime" minlevel="Info" writeTo="lifetimeConsole" final="true" /> </div><div> <!--略過微軟及Http相關資訊,避免寫入下方的NLogFile --> </div><div> <logger name="Microsoft.*" maxlevel="Info" final="true" /> </div><div> <logger name="System.Net.Http.*" maxlevel="Info" final="true" /> </div><div> <logger name="*" minlevel="Info" writeTo="NLogFile" /> </div><div> </rules> </div><div></nlog></div></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;"><span style="--en-markholder: true;"><br /></span></span></span></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">程式引用NLog</span></span></div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>builder.Logging.ClearProviders();//先清除原本的Log提供者</div><div>builder.WebHost.UseNLog();</div></div><div>預設會自行引用NLog.config</div><div><span style="font-size: 12pt;"><span style="color: #1aade0;"><span style="--en-markholder: true;"><br /></span></span></span></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">測試輸出</span></span></div><div>使用.Net Core Web Page</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div> public class IndexModel : PageModel</div><div> {</div><div> private readonly ILogger<IndexModel> _logger;</div><div> public IndexModel(ILogger<IndexModel> logger)</div><div> {</div><div> _logger = logger;</div><div> }</div><div> public void OnGet()</div><div> {</div><div> _logger.LogTrace("1.Trace");</div><div> _logger.LogDebug("2.Debug");</div><div> _logger.LogInformation("3.Information");</div><div> _logger.LogWarning("4.Warning");</div><div> _logger.LogError("5.Error");</div><div> _logger.LogCritical("6.Critical");</div><div> }</div><div> }</div></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;"><span style="--en-markholder: true;"><br /></span></span></span></div><div>針對NLog.config的設定,預設所有資訊會輸到的debug視窗</div><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgGrXDdSSOWpP9vI0qQHdhGgZMzzdxmaYeThxGru02Zb9COAL4GYvj9EKjNO5mcKaK1vlQkDZvtEfqYly59XHjsQuijHL4IVlUAet7nmLrbsexYYGxVC2R5M-kSD2ufE91q4yOG0BiWGr7q2Gj8selGKlXyJcvmks4XFsORMNasEFLLFCIf-_FVkBNG"><img border="0" id="BLOGGER_PHOTO_ID_7166853161279474578" src="https://blogger.googleusercontent.com/img/a/AVvXsEgGrXDdSSOWpP9vI0qQHdhGgZMzzdxmaYeThxGru02Zb9COAL4GYvj9EKjNO5mcKaK1vlQkDZvtEfqYly59XHjsQuijHL4IVlUAet7nmLrbsexYYGxVC2R5M-kSD2ufE91q4yOG0BiWGr7q2Gj8selGKlXyJcvmks4XFsORMNasEFLLFCIf-_FVkBNG=s16000" /></a><div>Microsoft.Hosting.Lifetime 輸出到Console</div><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjrUXYCXg0MBYjmcFQIRoIctIs9Ke8kfAnNeSuCswuD4XzQFMC_HavOieQ6n9LgYZNv5jU2EMjddyajnhNlSU0yMdKed12i-YJtpwwfVbACo6DL5PN5VCG233h6UucthlQTVrgkKjSdFK52ZC1JzqdCf5FKfRUvnv4SNNS3CxCz-vFVVlf7AiwWOPJg"><img border="0" id="BLOGGER_PHOTO_ID_7166853170083360146" src="https://blogger.googleusercontent.com/img/a/AVvXsEjrUXYCXg0MBYjmcFQIRoIctIs9Ke8kfAnNeSuCswuD4XzQFMC_HavOieQ6n9LgYZNv5jU2EMjddyajnhNlSU0yMdKed12i-YJtpwwfVbACo6DL5PN5VCG233h6UucthlQTVrgkKjSdFK52ZC1JzqdCf5FKfRUvnv4SNNS3CxCz-vFVVlf7AiwWOPJg=s16000" /></a><div><span style="font-size: 12pt;"><span style="color: #1aade0;"><span style="--en-markholder: true;"><br /></span></span></span></div><div>使用Loggger 輸出到檔案,設定層級為Info</div><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgopxyYAtuo_1dyeVgI5l0ypsNFFjgpqb9AwFnd7p1KUu_omLxkia5wW6M_d0hRytJib_3ZMrARN_c-yNWRuGFUtd-hsvnSXvVmpocHL7a6RQ7xMuIMbr0BV9HQNqrIiPm-b5acjNh5E_vR_YCE-r-0TmSCnh9SvqE_5IcWQkNt6GbW-bse7iFlhgXe"><img border="0" id="BLOGGER_PHOTO_ID_7166853180227758754" src="https://blogger.googleusercontent.com/img/a/AVvXsEgopxyYAtuo_1dyeVgI5l0ypsNFFjgpqb9AwFnd7p1KUu_omLxkia5wW6M_d0hRytJib_3ZMrARN_c-yNWRuGFUtd-hsvnSXvVmpocHL7a6RQ7xMuIMbr0BV9HQNqrIiPm-b5acjNh5E_vR_YCE-r-0TmSCnh9SvqE_5IcWQkNt6GbW-bse7iFlhgXe=s16000" /></a><div>檔案位置: wwwroot\Logs</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>2022-11-17 11:32:46.2017-[Info]-NetCoreWebNlog.Pages.IndexModel:3.Information </div><div>2022-11-17 11:32:46.2017-[Warn]-NetCoreWebNlog.Pages.IndexModel:4.Warning </div><div>2022-11-17 11:32:46.2017-[Error]-NetCoreWebNlog.Pages.IndexModel:5.Error </div><div>2022-11-17 11:32:46.2017-[Fatal]-NetCoreWebNlog.Pages.IndexModel:6.Critical</div></div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">整合AppSetting的Logging 區段</span></span></div><div>到目前為止的記錄層級,使用的是在NLog.config所定義好的,正式上線時,我們會透過appsettings.json來區分環境,若只使用NLog.config會比較難切分。</div><div>此時我們可以將appsetting.json的Logging來調整NLog.config的層級,如下圖兩邊對應,ps: 左邊的Default = 右邊的*</div><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi1hWyUTDekXQro12fvpnA2irSHVEENQQEQFsQ7whqS6crrfy61KNgrKtRfL4SIeJubcU6qy9h_Zno2DPBqCFPKBbTpr1-0TLde4wxMDNBY7LW-fEJ7K7QcdAZ-zzPmVRi79hmNktNX9B1Rn-LhaxsEISpVjs7eazStFAcjpMj70AJDkIBwdbQjUcUK"><img border="0" id="BLOGGER_PHOTO_ID_7166853183911581890" src="https://blogger.googleusercontent.com/img/a/AVvXsEi1hWyUTDekXQro12fvpnA2irSHVEENQQEQFsQ7whqS6crrfy61KNgrKtRfL4SIeJubcU6qy9h_Zno2DPBqCFPKBbTpr1-0TLde4wxMDNBY7LW-fEJ7K7QcdAZ-zzPmVRi79hmNktNX9B1Rn-LhaxsEISpVjs7eazStFAcjpMj70AJDkIBwdbQjUcUK=s16000" /></a><div>對應好,Program.cs 需再調整才會生效</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>//原 builder.WebHost.UseNLog();</div><div>//改</div><div>builder.WebHost.UseNLog(new NLogAspNetCoreOptions() { RemoveLoggerFactoryFilter = false });</div></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;"><span style="--en-markholder: true;"><br /></span></span></span></div><div>補充:若不使用Logging區段,也可以使用將整個NLog,config搬到appsettings.json,本文沒有實作,需要的話可以參考官方範例</div><div><a href="http://t.mail-svc.evernote.com/f/a/VulQkXvfpkZvePf2HP2WoQ~~/AADd_wA~/RgRlWEv2P0RdaHR0cHM6Ly9naXRodWIuY29tL05Mb2cvTkxvZy5FeHRlbnNpb25zLkxvZ2dpbmcvd2lraS9OTG9nLWNvbmZpZ3VyYXRpb24td2l0aC1hcHBzZXR0aW5ncy5qc29uVwNzcGNCCmN09sZ1Yydt0Z9SGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~">NLog configuration with appsettings.json</a></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;"><span style="--en-markholder: true;"><br /></span></span></span></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">其它/參考</span></span></div><ul><li><div><a href="http://t.mail-svc.evernote.com/f/a/XN2rXR4g8zzyKwTkcla9Lw~~/AADd_wA~/RgRlWEv2P0RFaHR0cHM6Ly9naXRodWIuY29tL05Mb2cvTkxvZy93aWtpL0dldHRpbmctc3RhcnRlZC13aXRoLUFTUC5ORVQtQ29yZS02VwNzcGNCCmN09sZ1Yydt0Z9SGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~">NLog 官方範例</a></div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/AhUV5lzmVST2KR1ytkNFnw~~/AADd_wA~/RgRlWEv2P0QmaHR0cHM6Ly9naXRodWIuY29tL2tpbXgvTmV0Q29yZVdlYk5sb2dXA3NwY0IKY3T2xnVjJ23Rn1IZa2lteGluZm8ubm90ZUBibG9nZ2VyLmNvbVgEAAAABg~~">本文範例</a></div></li></ul></div> <img alt="" border="0" height="1" src="http://t.mail-svc.evernote.com/q/XejG7xBY4VwWGT8O0_Ui8Q~~/AADd_wA~/RgRlWEv2PlcDc3BjQgpjdPbGdWMnbdGfUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" width="1" /> <div id="gtx-trans" style="left: 89px; position: absolute; top: 2418px;"><div class="gtx-trans-icon"></div></div>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-9827347389223967402022-09-27T09:44:00.004+08:002022-09-27T09:44:42.268+08:00VS2022 Blazor Maui staticwebassets.build.json not found<div style="border-width: 0px!important; border: 0px; color: transparent; display: none; font-size: 0px; line-height: 0px; margin: 0px; max-height: 1px; opacity: 0; padding: 0px; visibility: hidden; width: 1px;"><img alt="" border="0" height="1" src="http://t.mail-svc.evernote.com/q/gW8p-9ShUz8aJH329glkxQ~~/AADd_wA~/RgRlFNoePVcDc3BjQgpjIh5VMmMsXb5nUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" width="1" /></div> <div class="ennote"><div><span style="font-size: 12pt;"><span style="color: #1aade0;">問題</span></span></div><ul><li><div>之前開發的 Blazor Maui App在VS2022更新後無法建置。</div></li><li><div>錯誤訊息: staticwebassets.build.json' not found</div></li></ul><a href="https://blogger.googleusercontent.com/img/a/AVvXsEizV4FMAnf3E_ANhE6PNyO_160YsZA-MMLNTrSrpyfr2T4sZ8s7uodKIauDzEPr9cluF-64p-_gHOwRny3ow9RTzAetJ7NBzwO-KrE6fCeStwjdREY0fD2QlHJZx1YgvaH4X56uQS0SJA46xE5nhqRW968-dx1HhI-3XLNsVkwcmLzSZGaBHC4UdWYO"><img border="0" id="BLOGGER_PHOTO_ID_7147869161659778370" src="https://blogger.googleusercontent.com/img/a/AVvXsEizV4FMAnf3E_ANhE6PNyO_160YsZA-MMLNTrSrpyfr2T4sZ8s7uodKIauDzEPr9cluF-64p-_gHOwRny3ow9RTzAetJ7NBzwO-KrE6fCeStwjdREY0fD2QlHJZx1YgvaH4X56uQS0SJA46xE5nhqRW968-dx1HhI-3XLNsVkwcmLzSZGaBHC4UdWYO=s16000" /></a><div><span style="font-size: 12pt;"><span style="color: #1aade0;"><br /></span></span></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">原因</span></span></div><ul><li><div>更新Vs2022 to 17.3.4 or Window Update 。Github有一堆受災戶<a href="http://t.mail-svc.evernote.com/f/a/M5FijKW1Cw5JMsRLqG0vIA~~/AADd_wA~/RgRlFNoeP0QraHR0cHM6Ly9naXRodWIuY29tL2RvdG5ldC9tYXVpL2lzc3Vlcy8xMDEwMlcDc3BjQgpjIh5VMmMsXb5nUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG">已回報Issue</a>。</div></li></ul><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">解決方法-暫時性的</span></span></div><ol><li><div>舊專案清除obj/bin 並執行.net restore,此為修正maui相關的nuget無法正確參考。</div></li><li><div>安裝<a href="http://t.mail-svc.evernote.com/f/a/3lM2wXgSYG-pTLLNcKtqiQ~~/AADd_wA~/RgRlFNoeP0ReaHR0cHM6Ly9kb3RuZXQubWljcm9zb2Z0LmNvbS9lbi11cy9kb3dubG9hZC9kb3RuZXQvdGhhbmsteW91L3Nkay02LjAuNDAwLXdpbmRvd3MteDY0LWluc3RhbGxlclcDc3BjQgpjIh5VMmMsXb5nUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" rev="en_rl_none">6.0.4 SDK</a>.</div></li><li><div>在專案的上層目錄(跟.sln同層), 新增global.json 命令如下</div></li></ol><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>dotnet new globaljson --sdk-version 6.0.400</div></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;"><br /></span></span></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">其它/參考</span></span></div><ul><li><div><a href="http://t.mail-svc.evernote.com/f/a/M5FijKW1Cw5JMsRLqG0vIA~~/AADd_wA~/RgRlFNoeP0QraHR0cHM6Ly9naXRodWIuY29tL2RvdG5ldC9tYXVpL2lzc3Vlcy8xMDEwMlcDc3BjQgpjIh5VMmMsXb5nUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG">https://github.com/dotnet/maui/issues/10102</a></div></li><li><div>https://blog.miniasp.com/post/2021/06/04/Choose-the-right-DotNet-SDK-version-using-global-json</div></li></ul></div> <img alt="" border="0" height="1" src="http://t.mail-svc.evernote.com/q/xXQOkKrpZy7-6Ax2lrFOfQ~~/AADd_wA~/RgRlFNoePlcDc3BjQgpjIh5VMmMsXb5nUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" width="1" /> Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-45557939265060019492022-09-02T11:37:00.004+08:002022-09-02T11:37:24.332+08:00.NET Interactive Notebook 互動式文件測試<div style="border-width: 0px!important; border: 0px; color: transparent; display: none; font-size: 0px; line-height: 0px; margin: 0px; max-height: 1px; opacity: 0; padding: 0px; visibility: hidden; width: 1px;"></div> <div class="ennote"><div><span style="font-size: 12pt;"><span style="color: #1aade0;">前言</span></span></div><div><br /></div><div>同事參加K.NET2022年中技術分享,聽到的一個有趣的東西,讓你可以用 Markdown 寫說明文件,也可以搭配各種程式語言,直接在 Visual Studio Code 中 執行文件內的程式碼。</div><div><br /></div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">本機開發環境</span></span></div><ul><li><div>Visual Studio Code </div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/ar7CS1hs8zfOGOgIEtLZhw~~/AADd_wA~/RgRk8_4KP0RcaHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2l0ZW1zP2l0ZW1OYW1lPW1zLWRvdG5ldHRvb2xzLmRvdG5ldC1pbnRlcmFjdGl2ZS12c2NvZGVXA3NwY0IKYwYKeRFjTX-Nu1IZa2lteGluZm8ubm90ZUBibG9nZ2VyLmNvbVgEAAAABg~~">安裝.NET Interactive Notebooks 擴充套件</a></div></li><li><div>VSCode 安裝套件後,可以按 ctrl + shift + P ,會列出下圖清單,此時選擇 .NET Interactive: Create new blank notebook 建立空白的 Notebook 檔案</div></li><ul><li><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhJvNn6fdwoFZrmryK_C14Ibe2v9uLLNg55nXSd2e2RVml33Q6jC6A3c3i-eR2t_gjph_T6PlT-RZQnnmvyyCNdpCdl0qLKdjuT_Mc_KLkHZw838xwsm6bJkjbkEJuMNBMEfyL9j-KLkWMW9KMzPwGI-20JPy0GhAEOHQXLihIGl2RLmNfLXH584Fkk"><img border="0" id="BLOGGER_PHOTO_ID_7138620441686586994" src="https://blogger.googleusercontent.com/img/a/AVvXsEhJvNn6fdwoFZrmryK_C14Ibe2v9uLLNg55nXSd2e2RVml33Q6jC6A3c3i-eR2t_gjph_T6PlT-RZQnnmvyyCNdpCdl0qLKdjuT_Mc_KLkHZw838xwsm6bJkjbkEJuMNBMEfyL9j-KLkWMW9KMzPwGI-20JPy0GhAEOHQXLihIGl2RLmNfLXH584Fkk=s16000" /></a></li></ul><li><div>檔案類型選擇ipydb,此類型支援線上環境MyBinder</div></li><ul><li><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjDRErrAbijLka3Jm1VvPqxuRN9vPNTKhOuDxV4oBQ9QbPzGy9arf8dS1-m-0FLLSAuKUGBFhpkL4TtffJreUXdxooP9fxAaXbIichsi7VZ4eQkxPTlDfOXOj-KZ1i2nywbfrf3x-d5YpaTqJDIwtTGQ43XsRc8aYzVpeptR9T-MGUuCagGW2GaTgHo"><img border="0" id="BLOGGER_PHOTO_ID_7138620449795257794" src="https://blogger.googleusercontent.com/img/a/AVvXsEjDRErrAbijLka3Jm1VvPqxuRN9vPNTKhOuDxV4oBQ9QbPzGy9arf8dS1-m-0FLLSAuKUGBFhpkL4TtffJreUXdxooP9fxAaXbIichsi7VZ4eQkxPTlDfOXOj-KZ1i2nywbfrf3x-d5YpaTqJDIwtTGQ43XsRc8aYzVpeptR9T-MGUuCagGW2GaTgHo=s16000" /></a></li></ul><li><div>輸入C#程式碼,可以直接執行</div></li><ul><li><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj9K-nHxSHH16mlxkJ5oP5SQ3fjNOELF8BYYB1TOLAeYtfqaiaAkNh2QC6ItCCPFgn6rb9ttkbwsZV_uFJk1vJ3SevAvA7TqxMRC0Uk4JeiO-WGh8kcn0nrUy0yHo_xnmx8YIEQA5mxTxNsd2EbHOfXrxrYYyiR5StrqyyPW5GSezABHdN3PuGiPBJ5"><img border="0" id="BLOGGER_PHOTO_ID_7138620453746214626" src="https://blogger.googleusercontent.com/img/a/AVvXsEj9K-nHxSHH16mlxkJ5oP5SQ3fjNOELF8BYYB1TOLAeYtfqaiaAkNh2QC6ItCCPFgn6rb9ttkbwsZV_uFJk1vJ3SevAvA7TqxMRC0Uk4JeiO-WGh8kcn0nrUy0yHo_xnmx8YIEQA5mxTxNsd2EbHOfXrxrYYyiR5StrqyyPW5GSezABHdN3PuGiPBJ5=s16000" /></a></li><li><div><br /></div></li></ul></ul><div><span style="font-size: 12pt;"><span style="color: #1aade0;">MyBinder線上環境</span></span></div><div>寫好的文件,要給別人測試執行,最快的方式可以透過MyBinder直接對接Github的Repository。</div><ol><li><div>Github新增Repository <a href="http://t.mail-svc.evernote.com/f/a/dJ1r21UanAapPV0mze8ymA~~/AADd_wA~/RgRk8_4KP0QuaHR0cHM6Ly9naXRodWIuY29tL2tpbXgvS2ltSW50ZXJhY3RpdmVOb3RlYm9va1cDc3BjQgpjBgp5EWNNf427UhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG">KimInteractiveNotebook</a></div></li><li><div>新增<a href="http://t.mail-svc.evernote.com/f/a/vw5NYGv9kU9xXZm3lzFZCQ~~/AADd_wA~/RgRk8_4KP0ROaHR0cHM6Ly9naXRodWIuY29tL2RvdG5ldC9pbnRlcmFjdGl2ZS9ibG9iL21haW4vc2FtcGxlcy9teSUyMGJpbmRlci9Eb2NrZXJmaWxlVwNzcGNCCmMGCnkRY01_jbtSGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~" rev="en_rl_none">Dockerfile</a> (內容在連結裡)</div></li><li><div>新增<a href="http://t.mail-svc.evernote.com/f/a/W45UfUtZuOOqNTsfOEWQNw~~/AADd_wA~/RgRk8_4KP0Q8aHR0cHM6Ly9naXRodWIuY29tL2RvdG5ldC9pbnRlcmFjdGl2ZS9ibG9iL21haW4vTnVHZXQuY29uZmlnVwNzcGNCCmMGCnkRY01_jbtSGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~" rev="en_rl_none">Nuget.config</a> (內容在連結裡)</div></li><li><div>目錄結構</div></li><ol><li><div>要注意的是在Dockerfile有作目錄Mapping,文件要放在notebooks下</div></li><li><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjF8jkCcGM0eBEFoHFjhaqYsc41JF6us4cG7Ze3QQ2aVEuxQT5m1TMGp6HVAfpZ8jS9Mhcgy96-5KP1Qn_NRvEhs0jjNi8X_YNYfYW3s1AKBlyFbMY9SyfWMkLxaTrD9nzJPCHa1nDJn8aXbYvLrZe8_bpzEBwiWma7D1kBuUefqkz335zhJudmLao2"><img border="0" id="BLOGGER_PHOTO_ID_7138620462589398818" src="https://blogger.googleusercontent.com/img/a/AVvXsEjF8jkCcGM0eBEFoHFjhaqYsc41JF6us4cG7Ze3QQ2aVEuxQT5m1TMGp6HVAfpZ8jS9Mhcgy96-5KP1Qn_NRvEhs0jjNi8X_YNYfYW3s1AKBlyFbMY9SyfWMkLxaTrD9nzJPCHa1nDJn8aXbYvLrZe8_bpzEBwiWma7D1kBuUefqkz335zhJudmLao2=s16000" /></a></li><li><div><br /></div></li></ol><li><div>簽入Github,並將URL貼到<a href="http://t.mail-svc.evernote.com/f/a/YwrjX-FUGECPnRV598gm4g~~/AADd_wA~/RgRk8_4KP0QVaHR0cHM6Ly9teWJpbmRlci5vcmcvVwNzcGNCCmMGCnkRY01_jbtSGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~">MyBinder </a>執行Launch,MyBinder會將你的Github建置成image。</div></li><ul><li><div>最下方的URL 就是你要分享給別人執行的網址 <a href="http://t.mail-svc.evernote.com/f/a/oj1UIuhvGYxEkWOB_4ZMPg~~/AADd_wA~/RgRk8_4KP0Q7aHR0cHM6Ly9teWJpbmRlci5vcmcvdjIvZ2gva2lteC9LaW1JbnRlcmFjdGl2ZU5vdGVib29rL0hFQURXA3NwY0IKYwYKeRFjTX-Nu1IZa2lteGluZm8ubm90ZUBibG9nZ2VyLmNvbVgEAAAABg~~">https://mybinder.org/v2/gh/kimx/KimInteractiveNotebook/HEAD</a></div></li><li><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj-LoHerv0IIbSRdzS8-FCB1OeJvDJX5AQkWts8K0c-XxJjrBUHEO_tI9PFf7JgRx0H4ATj8j77pIqXMPZVdjrwGyVEZ45BejT2ZWHIBKWI7fqBWFuwYAp8eKlqXLA6fTDejql1T4o8vcgUVLN9fRU6kKS0H_Ae2QBMoKGT_GEGtjkeJuMM8K9lUESG"><img border="0" id="BLOGGER_PHOTO_ID_7138620472561260290" src="https://blogger.googleusercontent.com/img/a/AVvXsEj-LoHerv0IIbSRdzS8-FCB1OeJvDJX5AQkWts8K0c-XxJjrBUHEO_tI9PFf7JgRx0H4ATj8j77pIqXMPZVdjrwGyVEZ45BejT2ZWHIBKWI7fqBWFuwYAp8eKlqXLA6fTDejql1T4o8vcgUVLN9fRU6kKS0H_Ae2QBMoKGT_GEGtjkeJuMM8K9lUESG=s16000" /></a></li><li><div><br /></div></li></ul><li><div>當Launch完畢後,會執行一個獨立的容器,畫面如下,URL容器專屬網址,只有自己才可以使用,任何變更都不會寫回Repository上,當你關閉網頁後,再重新進入<a href="http://t.mail-svc.evernote.com/f/a/oj1UIuhvGYxEkWOB_4ZMPg~~/AADd_wA~/RgRk8_4KP0Q7aHR0cHM6Ly9teWJpbmRlci5vcmcvdjIvZ2gva2lteC9LaW1JbnRlcmFjdGl2ZU5vdGVib29rL0hFQURXA3NwY0IKYwYKeRFjTX-Nu1IZa2lteGluZm8ubm90ZUBibG9nZ2VyLmNvbVgEAAAABg~~" rev="en_rl_none">https://mybinder.org/v2/gh/kimx/KimInteractiveNotebook/HEAD</a>,會再產另一個。</div></li><ul><li><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj_f1Exb2HZEqRZ6Ilxgxv64dUJj88MHmUN0zSP0zIo69P1aQBFQLgDD_XHl50zvnyyAsn27kTkP2gXUcGp7jjteSQjwa22UmZ1TNArzSTA67WU1br0_8ymh5---HkmrYIC0rL_2BdwG5e6psGOnG6bVVw8YPc0urCtcs4hJLI-CrvekUbyQMXSzVhZ"><img border="0" id="BLOGGER_PHOTO_ID_7138620476555518338" src="https://blogger.googleusercontent.com/img/a/AVvXsEj_f1Exb2HZEqRZ6Ilxgxv64dUJj88MHmUN0zSP0zIo69P1aQBFQLgDD_XHl50zvnyyAsn27kTkP2gXUcGp7jjteSQjwa22UmZ1TNArzSTA67WU1br0_8ymh5---HkmrYIC0rL_2BdwG5e6psGOnG6bVVw8YPc0urCtcs4hJLI-CrvekUbyQMXSzVhZ=s16000" /></a><div><br /></div></li></ul></ol><div><span style="font-size: 12pt;"><span style="color: #1aade0;">本機線上環境</span></span></div><div>本機可以執行如同MyBinder的環境</div><ul><li><div><a href="http://t.mail-svc.evernote.com/f/a/rkE_F-6kwdeImS4RvXpPjg~~/AADd_wA~/RgRk8_4KP0Q0aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZHMvcmVsZWFzZS9weXRob24tMzYwL1cDc3BjQgpjBgp5EWNNf427UhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG">安裝Python</a></div></li><ul><li><div>指定環境變數 C:\Users\user\AppData\Local\Programs\Python\Python310\Scripts</div></li></ul><li><div>安裝JupyterLab</div></li></ul><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>pip install jupyterlab</div></div><ul><li><div>安裝.NET 環境</div></li></ul><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div> </div><div>dotnet tool install -g Microsoft.dotnet-interactive </div><div> </div><div>dotnet interactive jupyter install</div></div><ul><li><div>在文件目錄下執行</div></li></ul><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>jupyter lab --ip=0.0.0.0</div></div><div><br /></div><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgbLxEJt-eWrbdDLQJlmeB-1QLxL6PjNS8MpXcnNb0JdZaf2r0MkNvmeGh55tsKAP9_T7SMIOMp-QHZk1oLpqsuoFzN4hJemdbxRcuhwMQufs72aq4AZh2DA8xY9YQHoLD_7x9v2Koex2evdwaNJBkp-uEm2fmYS8rTkCj6LOrYLPb8aiLAWk5BhSda"><img border="0" id="BLOGGER_PHOTO_ID_7138620485236911074" src="https://blogger.googleusercontent.com/img/a/AVvXsEgbLxEJt-eWrbdDLQJlmeB-1QLxL6PjNS8MpXcnNb0JdZaf2r0MkNvmeGh55tsKAP9_T7SMIOMp-QHZk1oLpqsuoFzN4hJemdbxRcuhwMQufs72aq4AZh2DA8xY9YQHoLD_7x9v2Koex2evdwaNJBkp-uEm2fmYS8rTkCj6LOrYLPb8aiLAWk5BhSda=s16000" /></a><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">其它參考</span></span></div><ul><li><div><a href="http://t.mail-svc.evernote.com/f/a/tYJocXlEFogk4XjzKKNmzA~~/AADd_wA~/RgRk8_4KP0QwaHR0cHM6Ly90Zi53aWtpL3poX2hhbnQvYXBwZW5kaXgvanVweXRlcmxhYi5odG1sVwNzcGNCCmMGCnkRY01_jbtSGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~">部署自己的互動式 Python 開發環境 JupyterLab</a></div></li><ul><li><div><a href="http://t.mail-svc.evernote.com/f/a/IqfCJrARNu2ZcC-P9hWWSw~~/AADd_wA~/RgRk8_4KP0RSaHR0cHM6Ly9kb2NzLnNlcnZpY2VzdGFjay5uZXQvanVweXRlci1ub3RlYm9va3MtY3NoYXJwI3NldHVwLWp1cHl0ZXItZm9yLWMtbG9jYWxseVcDc3BjQgpjBgp5EWNNf427UhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG">CSharp Environment</a></div></li></ul><li><div><a href="http://t.mail-svc.evernote.com/f/a/Ni-du0GBcoTo5BhAZP07Pw~~/AADd_wA~/RgRk8_4KP0RAaHR0cHM6Ly9ibG9nLnBveWNoYW5nLm5ldC9wbGF5LXdpdGgtZG90bmV0LWludGVyYWN0aXZlLW5vdGVib29rL1cDc3BjQgpjBgp5EWNNf427UhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG">https://blog.poychang.net/play-with-dotnet-interactive-notebook/</a></div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/aG-EYQqqt-ZZdvrRDvUn3g~~/AADd_wA~/RgRk8_4KP0QlaHR0cHM6Ly9naXRodWIuY29tL2RvdG5ldC9pbnRlcmFjdGl2ZVcDc3BjQgpjBgp5EWNNf427UhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" rev="en_rl_none">https://github.com/dotnet/interactive</a></div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/yIePZQroOXXzubPTVKJ8_g~~/AADd_wA~/RgRk8_4KP0RBaHR0cHM6Ly9naXRodWIuY29tL2RvdG5ldC9pbnRlcmFjdGl2ZS9ibG9iL21haW4vc2FtcGxlcy9yZWFkbWUubWRXA3NwY0IKYwYKeRFjTX-Nu1IZa2lteGluZm8ubm90ZUBibG9nZ2VyLmNvbVgEAAAABg~~" rev="en_rl_none">https://github.com/dotnet/interactive/blob/main/samples/readme.md</a></div></li></ul></div> <img alt="" border="0" height="1" src="http://t.mail-svc.evernote.com/q/NBcTyrGjfFoE1-S2B2ohiQ~~/AADd_wA~/RgRk8_4KPlcDc3BjQgpjBgp5EWNNf427UhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" width="1" /> <div id="gtx-trans" style="left: 40px; position: absolute; top: 2985px;"><div class="gtx-trans-icon"></div></div>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-74675656235172837302022-05-27T14:23:00.004+08:002022-07-29T15:19:28.718+08:00.Net Core 在類別庫共用Page及Controller<div style="border-width: 0px!important; border: 0px; color: transparent; display: none; font-size: 0px; line-height: 0px; margin: 0px; max-height: 1px; opacity: 0; padding: 0px; visibility: hidden; width: 1px;"></div> <div class="ennote"><div><span style="font-size: 12pt;"><span style="color: #1aade0;">前言</span></span></div><ul><li><div>今天試著將寫好的API 及Razor Page移到共用的類別庫,讓其他專案可以使用,本以為建好一個類別庫後,搬過去就OK,但代誌沒那麼簡單....花了一些功夫才搞定。</div></li></ul><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">使用方式-Controller</span></span></div><div>1.類別庫的專案檔,加入Framework參考。</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div> <ItemGroup> </div><div> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </div><div> </ItemGroup></div></div><div><br /></div><div>2.Web專案,引用類別載的API Controller</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>builder.Services.AddControllers() </div><div> .AddApplicationPart(typeof(WebApplication2.WebAPI.Controllers.KimController).Assembly);</div></div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">使用方式-Razor Page</span></span></div><div><div data-en-clipboard="true" data-pm-slice="1 3 []">1.類別庫的專案檔:</div><ul><li>Project Sdk="Microsoft.NET.Sdk.<b>Razor</b>"</li><li><b><AddRazorSupportForMvc></b></li></ul></div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div><Project Sdk="Microsoft.NET.Sdk.Razor"> </div><div> </div><div> <PropertyGroup> </div><div> <TargetFramework>net6.0</TargetFramework> </div><div> <AddRazorSupportForMvc>true</AddRazorSupportForMvc> </div><div> </div><div> </PropertyGroup> </div><div> </div><div> </div><div> </div><div> <ItemGroup> </div><div> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </div><div> </ItemGroup> </div><div> </div><div></Project></div></div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">其它參考</span></span></div><ul><li><div><a href="http://t.mail-svc.evernote.com/f/a/zmSf3otH_uS6S9jpZFbCxQ~~/AADd_wA~/RgRkcvLeP0RPaHR0cHM6Ly9jdXJpYS5tZS9ob3ctdG8tdXNlLWEtY29udHJvbGxlci1mcm9tLWFub3RoZXItYXNzZW1ibHktaW4tYXNwLW5ldC1jb3JlL1cDc3BjQgpiht5tkGKn2RocUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG">https://curia.me/how-to-use-a-controller-from-another-assembly-in-asp-net-core/</a></div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/3NYdS_9phMqmiSqFxlI8Yg~~/AADd_wA~/RgRkcvLeP0RNaHR0cHM6Ly9naXRodWIuY29tL2RvdG5ldC9Bc3BOZXRDb3JlLkRvY3MvaXNzdWVzLzIyMDQ4I2lzc3VlY29tbWVudC04ODU0ODg5NzZXA3NwY0IKYobebZBip9kaHFIZa2lteGluZm8ubm90ZUBibG9nZ2VyLmNvbVgEAAAABg~~">https://github.com/dotnet/AspNetCore.Docs/issues/22048#issuecomment-885488976</a></div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/Z9z_fIJhrvlEPChmQkhlyQ~~/AADd_wA~/RgRkcvLeP0RTaHR0cHM6Ly9naXRodWIuY29tL2RvdG5ldC9Bc3BOZXRDb3JlLkRvY3MvdHJlZS9tYWluL2FzcG5ldGNvcmUvcmF6b3ItcGFnZXMvdWktY2xhc3NXA3NwY0IKYobebZBip9kaHFIZa2lteGluZm8ubm90ZUBibG9nZ2VyLmNvbVgEAAAABg~~">https://github.com/dotnet/AspNetCore.Docs/tree/main/aspnetcore/razor-pages/ui-class</a></div></li></ul></div> <img src="https://www.evernote.com/etpa/a657890a-8393-49a1-8d4d-e5bf1851a5c2" style="height: 1px; width: 1px;" /><div id="gtx-trans" style="left: -18px; position: absolute; top: 322px;"><div class="gtx-trans-icon"></div></div>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-34800939506938699482022-04-07T13:21:00.002+08:002022-07-29T15:19:56.373+08:00TypeScript Async相容測試<div style="border-width: 0px!important; border: 0px; color: transparent; display: none; font-size: 0px; line-height: 0px; margin: 0px; max-height: 1px; opacity: 0; padding: 0px; visibility: hidden; width: 1px;"></div> <div class="ennote"><div><span style="font-size: 12pt;"><span style="color: #1aade0;">前言</span></span></div><div> 前幾天與同事在測試某段javascript時,看到 async關鍵字,心想怎麼前端會有這種東東,可以執行非同步....,Google一下後,才知道在ECMA 2017就開始支援了..。</div><div>目前的專案使用的是TypeScript+ECMA 5.0,不敢冒然升級ECMA 6+ ~ 2021,因為有年代久遠的裝置,要考慮其相容性。</div><div><br /></div><div> 在不想升級ECMA,又想使用async 等ECMA新功能,該怎麼辨? 別擔心! 舞照跳、酒照喝XD,TypeScript的編譯器會幫你搞定一切,接下來的測試,會說明。</div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">測試</span></span></div><div><b>TypeScript - 原始版本</b> :程式碼會往後端呼叫3次,等每次呼叫完,才會執行下一個</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div> Lab() { </div><div> console.log("Lab-Start"); </div><div> this.AllFunctionsService.GetFunctions((response) => { </div><div> console.log(" Lab-GetFunctions 1"); </div><div> this.AllFunctionsService.GetFunctions((response) => { </div><div> console.log(" Lab-GetFunctions 2"); </div><div> this.AllFunctionsService.GetFunctions((response) => { </div><div> console.log(" Lab-GetFunctions 3"); </div><div> console.log("Lab-End"); </div><div> }); </div><div> }); </div><div> }); </div><div> </div><div> }</div></div><div><br /></div><div>執行結果</div><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh0rKN8PVAjpzGxjkmzpFQAXuEluefkk5nvypSOOScKB2O0cx9lx_0DHiwFp-d6c_Nvv_40DUEtEBm4A4Lmb51_jhO2ZJ7-G9HOtviszxkLL7XirbrERfdLB7jeU8Z6r0dig-qEIxomsfrk9jebgnzawLLvS07Ds9BpYmLt_Reaq5zhf2c4uY4oEvS7"><img border="0" id="BLOGGER_PHOTO_ID_7083412219219989490" src="https://blogger.googleusercontent.com/img/a/AVvXsEh0rKN8PVAjpzGxjkmzpFQAXuEluefkk5nvypSOOScKB2O0cx9lx_0DHiwFp-d6c_Nvv_40DUEtEBm4A4Lmb51_jhO2ZJ7-G9HOtviszxkLL7XirbrERfdLB7jeU8Z6r0dig-qEIxomsfrk9jebgnzawLLvS07Ds9BpYmLt_Reaq5zhf2c4uY4oEvS7=s16000" /></a><div><b>TypeScript - async版本</b> : await了3次的GetFunction,最後才執行到End,結果同上圖。看起來是不是簡單好維護多了~~~</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div> async Lab() { </div><div> console.log("Lab-Start"); </div><div> await this.AllFunctionsService.GetFunctions((response) => { </div><div> console.log(" Lab-GetFunctions 1"); </div><div> }); </div><div> await this.AllFunctionsService.GetFunctions((response) => { </div><div> console.log(" Lab-GetFunctions 2"); </div><div> }); </div><div> await this.AllFunctionsService.GetFunctions((response) => { </div><div> console.log(" Lab-GetFunctions 3"); </div><div> }); </div><div> console.log("Lab-End"); </div><div> }</div></div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">JavaScript的差異</span></span></div><div>感受一下TypeScript在ECMA不同版本下的差異。</div><div><br /></div><div><b>ECMA 2017+</b> : 跟TypeScript一致</div><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjjfQK2VJlA2SY9-FewmCiLJKYrQ0DHR9tMXbP2D6qTdldOe0BP-ycne9a9_zViwct5F_VlWnCU7KPNDjDgHygBsBdOwy9xpqlPLnpJDTi0tS_ZMvuPqE8Sw2NaqBad8wkS8k1Xwih51P9deMLl5kgknoN43RklMvAH-QyATLssM0iX7-JDQEANK6pT"><img border="0" id="BLOGGER_PHOTO_ID_7083412231626580690" src="https://blogger.googleusercontent.com/img/a/AVvXsEjjfQK2VJlA2SY9-FewmCiLJKYrQ0DHR9tMXbP2D6qTdldOe0BP-ycne9a9_zViwct5F_VlWnCU7KPNDjDgHygBsBdOwy9xpqlPLnpJDTi0tS_ZMvuPqE8Sw2NaqBad8wkS8k1Xwih51P9deMLl5kgknoN43RklMvAH-QyATLssM0iX7-JDQEANK6pT=s16000" /></a><div><b>ECMA 5 </b>: 產生了awater 程式碼,實作出非同步效果</div><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjL4qDezVxKxhdIIpGhSNEhton1mbgmQQ1-EbmABfHJbv83KjzqNCc0iBQdCqkNRC3R5u7_zyNY_3ng3O0RxzYunqPBrqYTPj0Ni8IFI2RyN8RlOdWcM7i-6HpbolT9eUoU7Hqdf3QiiWBwgWvE0Dj0v8plfrpnUDUPQK8AFcBsxEZEhyElaISMSgAv"><img border="0" id="BLOGGER_PHOTO_ID_7083412244228682466" src="https://blogger.googleusercontent.com/img/a/AVvXsEjL4qDezVxKxhdIIpGhSNEhton1mbgmQQ1-EbmABfHJbv83KjzqNCc0iBQdCqkNRC3R5u7_zyNY_3ng3O0RxzYunqPBrqYTPj0Ni8IFI2RyN8RlOdWcM7i-6HpbolT9eUoU7Hqdf3QiiWBwgWvE0Dj0v8plfrpnUDUPQK8AFcBsxEZEhyElaISMSgAv=s16000" /></a><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgZYOBxxbwD5f6T6cGJC2LdGmnWsKpfBtDRU8FmLYrKokk1sZAu96Gu8Db83HTyPWJqU2PoydszEhEMz1uZ_d5BwrHObzB0UgQv0m3XAo8O_hfWRxY5wWN68Y9UPtwOGAcdPNbhn4ZQejwIV2eCYuDOEmCqjQDVM8kJT-irn70OOmVlwJTELP_OCSIg"><img border="0" id="BLOGGER_PHOTO_ID_7083412266178120994" src="https://blogger.googleusercontent.com/img/a/AVvXsEgZYOBxxbwD5f6T6cGJC2LdGmnWsKpfBtDRU8FmLYrKokk1sZAu96Gu8Db83HTyPWJqU2PoydszEhEMz1uZ_d5BwrHObzB0UgQv0m3XAo8O_hfWRxY5wWN68Y9UPtwOGAcdPNbhn4ZQejwIV2eCYuDOEmCqjQDVM8kJT-irn70OOmVlwJTELP_OCSIg=s16000" /></a><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">其它參考</span></span></div><ul><li><div>https://ithelp.ithome.com.tw/articles/10241334</div></li></ul></div> Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-11540751121558130582022-02-24T16:18:00.005+08:002022-07-29T15:20:17.597+08:00SAP - 建立登入捷徑 <div style="border-width: 0px!important; border: 0px; color: transparent; display: none; font-size: 0px; line-height: 0px; margin: 0px; max-height: 1px; opacity: 0; padding: 0px; visibility: hidden; width: 1px;"></div> <div class="ennote"><div><span style="font-size: 12pt;"><span style="color: #1aade0;">前言</span></span></div><div>SAP GUI 登入時,每次都要輸入,用戶端、使用者、語系等..,有點繁瑣。想要省點功夫的話,可以透過建立捷徑的方式,在每次登入時,自動先帶出相關資訊,來加速登入。</div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">解決方式</span></span></div><div>1.先點選"連線",針對此連線建立捷徑。</div><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhFybqQWPs-_C-L-aToV-Sz32YxM-UA88NEfK48gyMqOYSTeE_3u3enUfKhLvn54ePaOZPUxyC1qxtJjl_sQXyGLS8aMka147xYB1WGXYXyf8JILcdvpA2HC54ZmQRr5JYBJZEKjTN-3_CFbxkECQusnYTvLkkbGQqc5bh5fNllt4hq7amU_d9g7NTN=s484" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="141" data-original-width="484" src="https://blogger.googleusercontent.com/img/a/AVvXsEhFybqQWPs-_C-L-aToV-Sz32YxM-UA88NEfK48gyMqOYSTeE_3u3enUfKhLvn54ePaOZPUxyC1qxtJjl_sQXyGLS8aMka147xYB1WGXYXyf8JILcdvpA2HC54ZmQRr5JYBJZEKjTN-3_CFbxkECQusnYTvLkkbGQqc5bh5fNllt4hq7amU_d9g7NTN=s16000" /></a><br /><div><br /></div><div>2.輸入登入資訊 </div><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhwGE2qIKaVNMMWyigfdd-dfq9IXfJxQXjQYmeGYHRGlgQ6lSXy2i1ud055JIPLYMENCbyQmALajZmVqQIyCpFofK9CW2lPEZSwo29uZxo5gjC7640_x0d-_OHNi1cV-Fh2c-xFA2TJtX1ry4hYWcbmWVruR9ZhYCGfvNdGR_g_RUU3Z99eIAQplSVh"><img border="0" id="BLOGGER_PHOTO_ID_7068187185493142114" src="https://blogger.googleusercontent.com/img/a/AVvXsEhwGE2qIKaVNMMWyigfdd-dfq9IXfJxQXjQYmeGYHRGlgQ6lSXy2i1ud055JIPLYMENCbyQmALajZmVqQIyCpFofK9CW2lPEZSwo29uZxo5gjC7640_x0d-_OHNi1cV-Fh2c-xFA2TJtX1ry4hYWcbmWVruR9ZhYCGfvNdGR_g_RUU3Z99eIAQplSVh=s16000" /></a><div><br /></div><div>3.測試登入,點2下開啟登入視窗,只需輸入密碼即可。</div><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhVoFgVYEGmcxAZYhpTiwxUcU-wbnuKxSaxvTnR9Fjt0Mye69U_923Rqe8ejoSTjqWqOAuEzbtSQ4LNOUoyBgND95bFiop-AqbRNaGzSqvFUO2rN3OsA2_5nP4UKeM0blXdXaGx53oJh-p9zvhJ6wE5WaL7j_K7HBj9o00U8Q8Ho_xHEPrWdUkoY5jn"><img border="0" id="BLOGGER_PHOTO_ID_7068187198290131282" src="https://blogger.googleusercontent.com/img/a/AVvXsEhVoFgVYEGmcxAZYhpTiwxUcU-wbnuKxSaxvTnR9Fjt0Mye69U_923Rqe8ejoSTjqWqOAuEzbtSQ4LNOUoyBgND95bFiop-AqbRNaGzSqvFUO2rN3OsA2_5nP4UKeM0blXdXaGx53oJh-p9zvhJ6wE5WaL7j_K7HBj9o00U8Q8Ho_xHEPrWdUkoY5jn=s16000" /></a><div><br /></div><div><div data-en-clipboard="true" data-pm-slice="1 1 []"><span style="font-size: 18px;"><span style="color: #1885e2;">同場加映-使用命令列方式登入</span></span></div><div>以下修改成自己的密碼,另存成bat,就可以點兩下立刻登入。</div><div data-codeblock="true" style="background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.14902); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div data-plaintext="true">C:
</div><div data-plaintext="true">cd C:\Program Files (x86)\SAP\FrontEnd\SAPgui
</div><div data-plaintext="true">sapshcut -type=Transaction -system=DS4 -client=110 -user=IT007 -pw=xxxx -language=ZF -command –maxgui4</div></div></div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">其它參考</span></span></div><ul><li><div><a href="http://t.mail-svc.evernote.com/f/a/-ECCdhUfeI_NRiUa-ce7XQ~~/AADd_wA~/RgRj-cPDP0RyaHR0cHM6Ly9ub2FoY2hvdS53b3JkcHJlc3MuY29tLzIwMTEvMDgvMjMvJUU1JUJGJUFCJUU5JTgwJTlGJUU3JTk5JUJCJUU1JTg1JUE1c2FwLWd1aS0lRTclOUElODQlRTYlOTYlQjklRTYlQjMlOTUvVwNzcGNCCmIWwz4XYnTdQPNSGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~">https://noahchou.wordpress.com/2011/08/23/%E5%BF%AB%E9%80%9F%E7%99%BB%E5%85%A5sap-gui-%E7%9A%84%E6%96%B9%E6%B3%95/</a></div></li></ul></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br />Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-11724971104128620692022-02-24T10:16:00.004+08:002022-07-29T15:20:32.793+08:00Window11-硬碟使用率100%<div style="border-width: 0px!important; border: 0px; color: transparent; display: none; font-size: 0px; line-height: 0px; margin: 0px; max-height: 1px; opacity: 0; padding: 0px; visibility: hidden; width: 1px;"></div> <div class="ennote"><div><span style="font-size: 12pt;"><span style="color: #1aade0;">前言</span></span></div><ul><li><div>早上一開機,電腦卡卡的,心想...我不是才剛將RAM加大嗎? 怎麼會....! 查看工作管理員後,手兇手是CompatTelRunner.exe ,大量的讀取資料。</div></li></ul><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhXGn7m3IQFBEn4jTr6jiBb_7BV4EqESK6Ry5twiS-AbBqN8rtmwScpNLqQdHKEf9gzEshRkqTVB6v2iIN-YxiNaNeK22Y0EbZhP_WTP6Fw8Tc2VKLGbxO9xU2mQnJDfcH6RUHbVynWzseaZuWw96VgS4ObR30VNrY44s0Y_mhBMDcqDB4L55kM-mf9"><img border="0" id="BLOGGER_PHOTO_ID_7068093350633483938" src="https://blogger.googleusercontent.com/img/a/AVvXsEhXGn7m3IQFBEn4jTr6jiBb_7BV4EqESK6Ry5twiS-AbBqN8rtmwScpNLqQdHKEf9gzEshRkqTVB6v2iIN-YxiNaNeK22Y0EbZhP_WTP6Fw8Tc2VKLGbxO9xU2mQnJDfcH6RUHbVynWzseaZuWw96VgS4ObR30VNrY44s0Y_mhBMDcqDB4L55kM-mf9=s16000" /></a><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">解決方式</span></span></div><ul><li><div>停用CompatTelRunner.exe。</div></li><ul><li><div>Q:停用它會有問題嗎?</div></li><li><div>A:它是用來診斷系統及運行OS升級兼容性檢查,我的筆電去年剛買,應該不需要。</div></li></ul><li><div>執行步驟</div></li><ul><li><div>按Windows + R,輸入 taskschd.msc</div></li><li><div>Task Scheduler Library> Microsoft> Windows> Application Experience</div></li><li><div>停用Microsoft Compatibility Appraiser</div></li><li><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgg81qXou1xdp7ssNtsg7SiRtklhSYgJOOLsm_wsOmMXCkva31O_5C01cceMbJEaAqBI0i3dAa1u9VPgXgScmbbMFpwasjbt-TWs8pPo6jGWrV5K3a8dvdDDz-5S9_P4F97DKhN2zVKIqo_2UWGWZYIzWZsp7WjiUMHCLBjdJRbVfU69u-sV5S4iMpU"><img border="0" id="BLOGGER_PHOTO_ID_7068093359853659986" src="https://blogger.googleusercontent.com/img/a/AVvXsEgg81qXou1xdp7ssNtsg7SiRtklhSYgJOOLsm_wsOmMXCkva31O_5C01cceMbJEaAqBI0i3dAa1u9VPgXgScmbbMFpwasjbt-TWs8pPo6jGWrV5K3a8dvdDDz-5S9_P4F97DKhN2zVKIqo_2UWGWZYIzWZsp7WjiUMHCLBjdJRbVfU69u-sV5S4iMpU=s16000" /></a></li><li><div><br /></div></li></ul></ul><div><span style="font-size: 12pt;"><span style="color: #1aade0;"><br /></span></span></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">其它參考</span></span></div><div><a href="http://t.mail-svc.evernote.com/f/a/esGrjSZLuIXaA5PhKnS9Cw~~/AADd_wA~/RgRj-W5vP0RmaHR0cHM6Ly9pbmZvYWNldGVjaC5uZXQvd2luZG93cy9jb21wYXR0ZWxydW5uZXIlRTklQUIlOTglRTclQTMlODElRTclOUIlQTQlRTQlQkQlQkYlRTclOTQlQTglRTclOEUlODcvVwNzcGNCCmIWb-kWYpVlP_VSGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~">https://infoacetech.net/windows/compattelrunner%E9%AB%98%E7%A3%81%E7%9B%A4%E4%BD%BF%E7%94%A8%E7%8E%87/</a></div><div><br /></div></div>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-3150959601191138532021-11-03T13:25:00.004+08:002022-07-29T15:20:42.386+08:00IIS SSL憑證匯出成Linux支援的檔案<div style="border-width: 0px!important; border: 0px; color: transparent; display: none; font-size: 0px; line-height: 0px; margin: 0px; max-height: 1px; opacity: 0; padding: 0px; visibility: hidden; width: 1px;"></div> <div class="ennote"><div><span style="font-size: 12pt;"><span style="color: #1aade0;">前言</span></span></div><div>Window主機上的SSL憑證是透過certify the web跟ZeroSSL申請同一網域通用的Wirdcard,現有需求需將該憑證匯出給另一台Linux主機用。</div><div><br /></div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">解決方式</span></span></div><div>1.在IIS先將憑證出來,匯出後為.pfx檔案,匯出時需設一組密碼。</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaIEgd_txg_8TE2JwkpRRt7in3o6eMFgyVwtD6fzP0UXYfau2eamvzU8dTP10Cs8_toVSLNIPY48_K7tZrYeWKvg-GZASniMzOOKXBL7i5K2yEoNj14h919iUQqrUSuG6umPIERshx_Kw/s1600/71107798b93823e5945906f08038632c-702387.png"><img border="0" height="289" id="BLOGGER_PHOTO_ID_7026210035717229410" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaIEgd_txg_8TE2JwkpRRt7in3o6eMFgyVwtD6fzP0UXYfau2eamvzU8dTP10Cs8_toVSLNIPY48_K7tZrYeWKvg-GZASniMzOOKXBL7i5K2yEoNj14h919iUQqrUSuG6umPIERshx_Kw/w400-h289/71107798b93823e5945906f08038632c-702387.png" width="400" /></a><div>2.初次使用OpenSSL,先將路徑設定環境變數。本文使用的是git內建的OpenSSL,C:\Program Files\Git\usr\bin\openssl.exe</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn7OnSAWcHuiXTy2bwYUoWTiiuligYga5nqZpENmEOLUHgpmj6M8qMhS9NHUqgMvV3iEIkb2nB3w7ZsvSQD8BDRF07tCQVnqaJ_w2rFzH356yUypEH6VSu90ISmucl7ky9lQMnxB2j1YI/s1600/4809d9b26cf45316104449a7d9f468a2-706479.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_7026210051151320530" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn7OnSAWcHuiXTy2bwYUoWTiiuligYga5nqZpENmEOLUHgpmj6M8qMhS9NHUqgMvV3iEIkb2nB3w7ZsvSQD8BDRF07tCQVnqaJ_w2rFzH356yUypEH6VSu90ISmucl7ky9lQMnxB2j1YI/s320/4809d9b26cf45316104449a7d9f468a2-706479.png" /></a><div>3.使用OpenSSL將.pfx的<b><span style="color: #1885e2;">憑證檔案</span></b>匯出</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>openssl pkcs12 -in server.pfx -nokeys -out server-crt.pem -password "pass:1234" -nodes</div></div><div><br /></div><div>4.使用OpenSSL將.pfx的<b><span style="color: #1885e2;">加密金鑰檔案</span></b>匯出</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>openssl pkcs12 -in server.pfx -nocerts -out private.pem -password "pass:1234" -nodes</div></div><div><br /></div><div>5.使用OpenSSL將<b><span style="color: #1885e2;">加密金鑰檔案</span></b>匯出成<b><span style="color: #fc1233;">已解密</span></b>的金鑰檔案</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>openssl rsa -in "private.pem" -out "PrivateKey.key"</div></div><div>參數</div><ul><li><div>-nokeys 私密金鑰檔 (僅輸出憑證檔案)</div></li><li><div>-nocerts 伺服器憑證檔 (僅輸出金鑰檔案)</div></li><li><div>-nodes 輸出一個沒有密碼保護的私密金鑰檔</div></li><li><div>-password:"pass: <b>.pfx匯出時的密碼</b>"</div></li></ul><div><br /></div><div>完成後,只需要server-crt.pem及PrivateKey.key,就可以在Liunx上匯入。</div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">其它/參考</span></span></div><ul><li><div><a href="http://t.mail-svc.evernote.com/f/a/c0NX4oUIqSZUBclvnd5McQ~~/AADd_wA~/RgRjZKHIP0RXaHR0cHM6Ly9ibG9nLm1pbmlhc3AuY29tL3Bvc3QvMjAxOS8wMi8yNS9DcmVhdGluZy1TZWxmLXNpZ25lZC1DZXJ0aWZpY2F0ZS11c2luZy1PcGVuU1NMVwNzcGNCCmGByByCYaV8yY9SGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~" rev="en_rl_none">https://blog.miniasp.com/post/2019/02/25/Creating-Self-signed-Certificate-using-OpenSSL</a></div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/9IyLMS7M9hlPKMhmg72CQw~~/AADd_wA~/RgRjZKHIP0RJaHR0cHM6Ly9qdXN0aG9kbC5ibG9nc3BvdC5jb20vMjAxOC8wNC90bHMtc3NsLWNydC1rZXktdG8tcGVtLW9wZW5zc2wuaHRtbFcDc3BjQgphgcgcgmGlfMmPUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" rev="en_rl_none">https://justhodl.blogspot.com/2018/04/tls-ssl-crt-key-to-pem-openssl.html</a></div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/C95a8a_0-3aT3xDy87Z4iA~~/AADd_wA~/RgRjZKHIP0QiaHR0cHM6Ly93YW5ncHJpbmNlLmlkdi50dy90ZWNoLzczM1cDc3BjQgphgcgcgmGlfMmPUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" rev="en_rl_none">https://wangprince.idv.tw/tech/733</a></div></li><li><div>*<a href="http://t.mail-svc.evernote.com/f/a/WPETt2ubq5KS_noGqscmQg~~/AADd_wA~/RgRjZKHIP0RmaHR0cHM6Ly93d3cubXlzeXNhZG1pbnRpcHMuY29tL3dpbmRvd3Mvc2VydmVycy82Mi1leHBvcnQtcHJpdmF0ZS1rZXktYW5kLWNlcnRpZmljYXRlLWZyb20taWlzLXBmeC1maWxlVwNzcGNCCmGByByCYaV8yY9SGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~" rev="en_rl_none">https://www.mysysadmintips.com/windows/servers/62-export-private-key-and-certificate-from-iis-pfx-file</a></div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/dx9Ci_Y6_91cx0hsmL-zAg~~/AADd_wA~/RgRjZKHIP0RRaHR0cHM6Ly9ibG9nLm1pbmlhc3AuY29tL3Bvc3QvMjAxOS8wNC8xNy9Db252ZXJ0LVBGWC1hbmQtQ0VSLWZvcm1hdC11c2luZy1PcGVuU1NMVwNzcGNCCmGByByCYaV8yY9SGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~" rev="en_rl_none">簡介憑證申請的過程</a><img src="https://www.evernote.com/etpa/65123705-8ffc-4f56-9c65-07a01db2fc37" style="height: 1px; width: 1px;" /> <img alt="" border="0" height="1" src="http://t.mail-svc.evernote.com/q/4wRragyTg-0EIzrwKKvQeQ~~/AADd_wA~/RgRjZKHIPlcDc3BjQgphgcgcgmGlfMmPUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" width="1" /></div></li></ul></div>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-5183214020791631002021-10-12T16:42:00.002+08:002022-07-29T15:20:51.284+08:00Windows 11 - Snagit 2019無法擷圖<div style="border-width: 0px!important; border: 0px; color: transparent; display: none; font-size: 0px; line-height: 0px; margin: 0px; max-height: 1px; opacity: 0; padding: 0px; visibility: hidden; width: 1px;"></div> <div class="ennote"><div>前兩天升上Windows 11後,Snagit 2019無法使用,一按擷圖,應用程式就會Crash。事件檢視器的訊息如下。</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0rkqLQj1P2xkTptohoW9ZeAqu1kyPZY1eeICMEYPpv64hVNVJv9AgCOP-hNqp3e2aOzk2EcRabLsv2ERhKubhHMwKYlC8u-jKA14yaRzhrmHPsh5E6D6EJ4U2QkfmQu4HQ3e3hYVKQ2A/s1600/d46bf5ef42a6b7aa86404eb832163e71-735763.png"><img border="0" id="BLOGGER_PHOTO_ID_7018096990370076834" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0rkqLQj1P2xkTptohoW9ZeAqu1kyPZY1eeICMEYPpv64hVNVJv9AgCOP-hNqp3e2aOzk2EcRabLsv2ERhKubhHMwKYlC8u-jKA14yaRzhrmHPsh5E6D6EJ4U2QkfmQu4HQ3e3hYVKQ2A/s16000/d46bf5ef42a6b7aa86404eb832163e71-735763.png" /></a><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">解決方式</span></span></div><div>在官方論壇,找到了解法。將Snagit應用程式,強制使用Nvidia Processor。</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU_diGpf3Z1SMR2sOQQd8cjxslrIqOU5aLQENpds_GTz1jlDJDeOj4MPym28Ec2D506pGNP-CnAgSHUWsXeirLkgSlux0bAcjVn9JFuyt8-XN59qSEPHHPLqDIKXtW9kF8Zk7QGdIjhIQ/s1600/4e51db967e197c4dad276fd60fd2378a-740455.png"><img border="0" height="349" id="BLOGGER_PHOTO_ID_7018097002744766754" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU_diGpf3Z1SMR2sOQQd8cjxslrIqOU5aLQENpds_GTz1jlDJDeOj4MPym28Ec2D506pGNP-CnAgSHUWsXeirLkgSlux0bAcjVn9JFuyt8-XN59qSEPHHPLqDIKXtW9kF8Zk7QGdIjhIQ/w640-h349/4e51db967e197c4dad276fd60fd2378a-740455.png" width="640" /></a><div><span style="font-size: 12pt;"><span style="color: #1aade0;"><br /></span></span></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">其它參考</span></span></div><div><a href="http://t.mail-svc.evernote.com/f/a/nl65FIQuVH7HDmr34kgJ5A~~/AADd_wA~/RgRjR87_P0RsaHR0cHM6Ly9zdXBwb3J0LnRlY2hzbWl0aC5jb20vaGMvZW4tdXMvY29tbXVuaXR5L3Bvc3RzLzM2MDA3MTY3MzI3MS1TbmFnaXQtRWRpdG9yLTIwMTktSGFuZ2luZy1DcmFzaGluZy1GSVgtVwNzcGNCCmFg_0llYYJCsNZSGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~" rev="en_rl_none">https://support.techsmith.com/hc/en-us/community/posts/360071673271-Snagit-Editor-2019-Hanging-Crashing-FIX-</a></div><div><img src="https://www.evernote.com/etpa/2e152cfa-72c1-4ded-991b-aa0714076638" style="height: 1px; width: 1px;" /> <img alt="" border="0" height="1" src="http://t.mail-svc.evernote.com/q/k2Rk4_4ePUNtIbgrIA8TSA~~/AADd_wA~/RgRjR87_PlcDc3BjQgphYP9JZWGCQrDWUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" width="1" /></div></div>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-60675878151571520322021-09-29T17:41:00.003+08:002022-07-29T15:21:00.641+08:00關於IIS 503錯誤處理<div style="border-width: 0px!important; border: 0px; color: transparent; display: none; font-size: 0px; line-height: 0px; margin: 0px; max-height: 1px; opacity: 0; padding: 0px; visibility: hidden; width: 1px;"></div> <div class="ennote"><div><span style="font-size: 12pt;"><span style="color: #1aade0;">前言</span></span></div><div><br /></div><div>工作需求換了台新筆電後,將舊筆電的IIS設定匯進來,執行後出現503錯誤。事件檢視器訊息如下</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>The Module DLL C:\Windows\system32\inetsrv\aspnetcore.dll failed to load. The data is the error.</div></div><div><br /></div><div>此訊息是由於IIS的Site部份為.Net Core。本以為只要安裝好<a href="http://t.mail-svc.evernote.com/f/a/anA87QvXeb8jLRiZVvePbg~~/AADd_wA~/RgRjNrlaP0RjaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvYXNwbmV0L2NvcmUvaG9zdC1hbmQtZGVwbG95L2lpcy9ob3N0aW5nLWJ1bmRsZT92aWV3PWFzcG5ldGNvcmUtNS4wVwNzcGNCCmFSWjRUYRWaU6dSGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~">.Net Core Hosting Bundle</a>就OK了,但....還是一樣會發生錯誤。</div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">原因</span></span></div><div>此錯誤是有歷史痕跡的! 舊筆電一開始裝的是.Net Core 1.1還是2.0....忘了,其AspNetCoreModule的位置是在C:\Windows\system32\inetsrv\aspnetcore.dll。但之後的.Net Core改成AspNetCoreModuleV2,原有的已不在使用,而在我將舊筆電的IIS設定匯進來後,AspNetCoreModule的設定也匯進來到applicationHost.config了。白話說就是IIS的組態有不存在.dll的設定。</div><div><br /></div><div><span style="font-size: 12pt;"><span style="color: #1aade0;">解決方式</span></span></div><div>修改組態C:\Windows\System32\inetsrv\config\applicationHost.config,將AspNetCoreModule模組移除或註解起來。</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-gvSRDZDccl2NR_lgVeLbcG1RgClbShAzsP0d8p8mtlmDJEK7PANLiys4aCH2_DdFdLDLvc8bz-f_5oW05WUJfhGk1N58EcW2g1N23B4auoVHKcjcqalGDJarVgbMddB4LVszzy9Zmx4/s1600/74c9cbb1660dafc21285fc18f3d35af3-779887.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_7013288101306657730" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-gvSRDZDccl2NR_lgVeLbcG1RgClbShAzsP0d8p8mtlmDJEK7PANLiys4aCH2_DdFdLDLvc8bz-f_5oW05WUJfhGk1N58EcW2g1N23B4auoVHKcjcqalGDJarVgbMddB4LVszzy9Zmx4/s320/74c9cbb1660dafc21285fc18f3d35af3-779887.png" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtByWe9xeLM4T6RjdLlHx_DbNeCdzZ_goDYZA-CM1tQtygTDD2aAFJqlQMVyrHfhGEGcVAsMYFy0CAz6OlqWkivK-nLSGcQm0oWDhmuY-hpaVvuVOzbhJySWYz0KMGGvtHNuq9Jd-KOOE/s1600/cd2ba49dfce991813aa61ecbe175c516-783335.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_7013288109206762066" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtByWe9xeLM4T6RjdLlHx_DbNeCdzZ_goDYZA-CM1tQtygTDD2aAFJqlQMVyrHfhGEGcVAsMYFy0CAz6OlqWkivK-nLSGcQm0oWDhmuY-hpaVvuVOzbhJySWYz0KMGGvtHNuq9Jd-KOOE/s320/cd2ba49dfce991813aa61ecbe175c516-783335.png" /></a><div><span style="font-size: 12pt;"><span style="color: #1aade0;">其他錯誤</span></span></div><div>在修改完後,一樣出現503錯誤,事件檢視器訊息</div><div style="--en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;"><div>The Module DLL C:\Program Files\IIS\Application Request Routing\requestRouter.dll failed to load. The data is the error.</div><div>The Module DLL C:\Windows\system32\inetsrv\rewrite.dll failed to load. The data is the error.</div></div><div><br /></div><div>因為有用到Url Rewrite,此錯誤使用Web Platform將相關模組安裝好,就OK了。</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAKnmK-bnmZsooXL2I-jRzA5y3rAWM3L6cBImr9mqxKr3EvLn1A8eeW_lNiXBsP-uuGikplxQKI8L0rh5LUgL-CEuj2Wqof-p0ES1J2CDFcXc1KiL2JU21MrCuMp63rQq7bf9GR-FHtUE/s1600/86fdf8b8f972bd1c6a9167aabf9fe1bf-785546.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_7013288119061873090" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAKnmK-bnmZsooXL2I-jRzA5y3rAWM3L6cBImr9mqxKr3EvLn1A8eeW_lNiXBsP-uuGikplxQKI8L0rh5LUgL-CEuj2Wqof-p0ES1J2CDFcXc1KiL2JU21MrCuMp63rQq7bf9GR-FHtUE/s320/86fdf8b8f972bd1c6a9167aabf9fe1bf-785546.png" /></a></div><div class="ennote"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9pawQ4Cg8_jZ4MRt88x0iDOLI08zBwB1jmvH65JH-Tl-jr4Ej4sGfZAh0cZf14Aw0piwLO25BZk0GLzO6YKgl9rODp3wXUrBe2jO-lfCqm5Ue4vKnhhpyXTwPdQzaLrXbIBbymX6zwGQ/s1600/b192d37b797db8d57a481dde25e516d0-787607.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_7013288127442564642" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9pawQ4Cg8_jZ4MRt88x0iDOLI08zBwB1jmvH65JH-Tl-jr4Ej4sGfZAh0cZf14Aw0piwLO25BZk0GLzO6YKgl9rODp3wXUrBe2jO-lfCqm5Ue4vKnhhpyXTwPdQzaLrXbIBbymX6zwGQ/s320/b192d37b797db8d57a481dde25e516d0-787607.png" /></a><div><span style="font-size: 12pt;"><span style="color: #1aade0;">其它參考</span></span></div><ul><li><div>https://stackoverflow.com/questions/40161982/aspnetcore-dll-failed-to-load</div></li></ul></div> <table cellpadding="0" cellspacing="0" style="border-top: 1px solid rgb(230, 230, 230); margin-bottom: 16px; margin-top: 32px; padding-top: 16px;"> <tbody><tr> <td style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16px; text-align: left;"><br /></td></tr></tbody></table>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-11461405220492967122021-07-05T16:52:00.002+08:002022-07-29T15:21:08.970+08:00AzureDevOps-還原已刪除的Git 分支<div style="border-width: 0px!important; border: 0px; color: transparent; display: none; font-size: 0px; line-height: 0px; margin: 0px; max-height: 1px; opacity: 0; padding: 0px; visibility: hidden; width: 1px;"></div> <div class="ennote"><div>今天同事要找的相關程式碼,前陣子我以為不會再用到,就把它刪除了。試著要在本機的git下reflog,看可不可以找到分支的commit ID來還原,但...已過了期限(預設保留30天),找不到。</div><div>本機找不到,就往上找找,幸好AzureDevOps有提供還原已刪除的方式</div><div><br /></div><div><span style="color: #1aade0; font-size: 12pt;">還原方式</span></div><ul><li><div>進入Branches,在搜尋輸入已刪除分支的<b>完整名稱,</b>找到後就可以還原回來了。</div></li></ul><div><b><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR92elezHsNYIUVF0kce3_ZOiZExMTd0FJfEJ_lwtUC7jGNqZIY6-hySVRro6l5gHbQWJ233fGm8h8Z7KEG5MyR64J50U7VMeo5Ge5wAzilyQIL_kp59skSrlekLKaG5mIYlfRtO8rwbo/s1600/3c60c8fa2b357076b25d985e109c90b8-771516.png"><img border="0" height="373" id="BLOGGER_PHOTO_ID_6981361849905626770" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR92elezHsNYIUVF0kce3_ZOiZExMTd0FJfEJ_lwtUC7jGNqZIY6-hySVRro6l5gHbQWJ233fGm8h8Z7KEG5MyR64J50U7VMeo5Ge5wAzilyQIL_kp59skSrlekLKaG5mIYlfRtO8rwbo/w640-h373/3c60c8fa2b357076b25d985e109c90b8-771516.png" width="640" /></a></b></div><div><br /></div><div><br /></div><div><span style="color: #1aade0; font-size: 12pt;">其它參考</span></div><ul><li><div><a href="http://t.mail-svc.evernote.com/f/a/Upl-nNsVygzqcJ3jdJse9g~~/AADd_wA~/RgRixUyZP0RgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vemgtdHcvYXp1cmUvZGV2b3BzL3JlcG9zL2dpdC9yZXN0b3JlLWRlbGV0ZWQtYnJhbmNoP3ZpZXc9YXp1cmUtZGV2b3BzVwNzcGNCCmDfmcfiYH5mvrJSGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~">https://docs.microsoft.com/zh-tw/azure/devops/repos/git/restore-deleted-branch?view=azure-devops</a></div></li><li><div><a href="http://t.mail-svc.evernote.com/f/a/2aM1raZYJTk8kAR24TwC9w~~/AADd_wA~/RgRixUyZP0RLaHR0cHM6Ly9naXRib29rLnR3L2NoYXB0ZXJzL2JyYW5jaC9yZXN0b3JlLWRlbGV0ZWQtYnV0LXVubWVyZ2VkLWJyYW5jaC5odG1sVwNzcGNCCmDfmcfiYH5mvrJSGWtpbXhpbmZvLm5vdGVAYmxvZ2dlci5jb21YBAAAAAY~">https://gitbook.tw/chapters/branch/restore-deleted-but-unmerged-branch.html</a><img src="https://www.evernote.com/etpa/53a5e3cb-debd-4dd3-b330-4fc2392b718a" style="height: 1px; width: 1px;" /> <img alt="" border="0" height="1" src="http://t.mail-svc.evernote.com/q/X-6W2OVr10CW838UL2OSug~~/AADd_wA~/RgRixUyZPlcDc3BjQgpg35nH4mB-Zr6yUhlraW14aW5mby5ub3RlQGJsb2dnZXIuY29tWAQAAAAG" width="1" /></div></li></ul></div>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-27714414467170327662021-06-25T11:16:00.005+08:002021-06-25T11:16:52.115+08:00使用ExeOutput for PHP發信<div class="ennote"><div>目前有一外包程式使用的是php開發,外包商反應我們提供的AWS Smtp資訊無法發信,但我測試使用.net C#可以正常發信。 由於不會寫php,一時間也不知如何驗證,是哪邊出錯?</div><div>為釐清是哪邊程式出錯,找了一個php範例來測試,但...不會php,也沒有安裝相關環境可以用,怎麼測?</div><div><br /></div><div><br /></div><div><span style="color: #1aade0; font-size: 12pt;">解決方式</span></div><div><br /></div><div>找到了一個軟體可以針對php程式直接編譯成執行檔。沒有安裝php,也會自動幫你下載安裝。</div><div><br /></div><div>1.<a href="https://www.exeoutput.com/download">下載連結</a></div><div>2.安裝後,打開應用程式,新增一個專案並選擇進入點的.php,本例為下載php email的範例程式</div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTRpQxPByHwdj7Ddr1KFj2_Ghv1rs4xbIi5V6qN9ofNKsNKaN3BI4MCecAbs9J050ShVwDlIc8W-bdf8zeKx07QkCRhLtlw8xP4gIX1X1NQQyYoCuLG0H0NkxjvzzzqQt7vCY7KKfAwfQ/s1600/25c2fc3c91ad4cb631b2b5f482a1646b-710874.png"><img border="0" height="329" id="BLOGGER_PHOTO_ID_6977564837782082130" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTRpQxPByHwdj7Ddr1KFj2_Ghv1rs4xbIi5V6qN9ofNKsNKaN3BI4MCecAbs9J050ShVwDlIc8W-bdf8zeKx07QkCRhLtlw8xP4gIX1X1NQQyYoCuLG0H0NkxjvzzzqQt7vCY7KKfAwfQ/w400-h329/25c2fc3c91ad4cb631b2b5f482a1646b-710874.png" width="400" /></a></div><div><br /></div><div>選擇輸出的檔案類型,本例為主控台應用程式</div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE1ivFr8843pP6Mad1oOv03WTZQ5q2iLPyZPYg-ErGUSiVndcZDIkj7wgxxPAg_qzdGc-ms6SmlCGmhGyxIJsgOeKoDBVi85fOMe5_rTe_OpjC-DJEFXl9-FsnsoLMvNLtq3rV5tX6tM4/s1600/84dba48de8b0676708b3a335a4db489a-713766.png"><img border="0" height="157" id="BLOGGER_PHOTO_ID_6977564850098423618" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE1ivFr8843pP6Mad1oOv03WTZQ5q2iLPyZPYg-ErGUSiVndcZDIkj7wgxxPAg_qzdGc-ms6SmlCGmhGyxIJsgOeKoDBVi85fOMe5_rTe_OpjC-DJEFXl9-FsnsoLMvNLtq3rV5tX6tM4/w400-h157/84dba48de8b0676708b3a335a4db489a-713766.png" width="400" /></a></div><div><br /></div><div>3.編譯程式</div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZNAm169XRQoLp1OibPgxZUbydOb5jG_ANS407NpDFs-K5KX-9svTwN_tcjOnUp5MJnfGMCcohksKTIc2Tf75GtkqmIinJ6oT_WtQ5wxPtD4QhcKWhyphenhyphenaZx8aS6-Ni7sYQff0eTwftjFFk/s1600/43306ca8023c7565fb18cfa3657f6562-715686.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_6977564857716864066" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZNAm169XRQoLp1OibPgxZUbydOb5jG_ANS407NpDFs-K5KX-9svTwN_tcjOnUp5MJnfGMCcohksKTIc2Tf75GtkqmIinJ6oT_WtQ5wxPtD4QhcKWhyphenhyphenaZx8aS6-Ni7sYQff0eTwftjFFk/s320/43306ca8023c7565fb18cfa3657f6562-715686.png" /></a></div><div><br /></div><div>成功後,就會看到輸出的exe</div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8PIBnKdq7ISDqODqmNhT2X4hmY_vJoLXajASs1nC85-baHW-CDC0ayLiTRBEcXVOc0a3MXc_ubzR8lAEjGubDDxp8orI9wZToIYPJq-fZAI6K-qk3_ulRP1nXlNZpa50w3UeM2arVYt4/s1600/f530704a87514595abcc2fe97a347da9-717370.png"><img border="0" height="90" id="BLOGGER_PHOTO_ID_6977564864557732834" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8PIBnKdq7ISDqODqmNhT2X4hmY_vJoLXajASs1nC85-baHW-CDC0ayLiTRBEcXVOc0a3MXc_ubzR8lAEjGubDDxp8orI9wZToIYPJq-fZAI6K-qk3_ulRP1nXlNZpa50w3UeM2arVYt4/w400-h90/f530704a87514595abcc2fe97a347da9-717370.png" width="400" /></a></div><div>ps:.exop為ExeOutput的專案設定檔</div><div><span style="font-size: 12pt;"><br /></span></div><div><span style="color: #1aade0; font-size: 12pt;">其它參考</span></div><div><br /></div><div><a href="https://www.exeoutput.com/samples/sendmail-console-app">https://www.exeoutput.com/samples/sendmail-console-app</a></div><div><br /></div></div> <br /><img src="https://www.evernote.com/etpa/c928b11e-6172-4da0-9e6e-420fd2ae6205" style="height: 1px; width: 1px;" /> Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-73639246644894064942021-05-03T10:32:00.002+08:002021-05-03T10:32:54.195+08:00NSwag Studio -更新Web API文件參考<div class="ennote"><div><div><span style="color: #1aade0; font-size: 12pt;">前言</span></div><div> </div><div> 寫給同事的操作文,在新增API或增修欄位時,如何更新Client端的程式碼。</div><div><br /></div><div><span style="color: #1aade0; font-size: 12pt;">How To</span></div><div><br /></div><div>1.沒有安裝過NSwagStudio的話,先到此<a href="https://github.com/RicoSuter/NSwag/wiki/NSwagStudio">下載安裝</a>。</div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUrYaJQgOIKh7KmnlbLl_LmxZkYFck0QUb6QzuBJaY-iQNYWIvcTuP5zsccMqq3ITplWK2zZUFcyFnl7lP6MTyEWZrEzhNJ1NXxrAVpsva2cM5VogfPll0zy6yDMNFzDCDBx5v1mTgWRY/s1600/32a8a78d419e4d71cec56f121dd2b587-787581.png"><img border="0" height="136" id="BLOGGER_PHOTO_ID_6957885630783355970" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUrYaJQgOIKh7KmnlbLl_LmxZkYFck0QUb6QzuBJaY-iQNYWIvcTuP5zsccMqq3ITplWK2zZUFcyFnl7lP6MTyEWZrEzhNJ1NXxrAVpsva2cM5VogfPll0zy6yDMNFzDCDBx5v1mTgWRY/w640-h136/32a8a78d419e4d71cec56f121dd2b587-787581.png" width="640" /></a></div><div><br /></div><div>2.Web API網站先執行起來,並打開應用程式,副檔名.nswag</div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9SGC9Nq1f3pMRnHzJucvgByAGRbFgFocF7mOPW83tdT2M2MGlFr-xV8i0rfrcXHqbLUY3P5DHcJObzOIffKO4HcedWW2U90l_HPjGabq0AQTC9faAGsebzX632hjk27Panip0GGTCsvY/s1600/9c6afaaf6ce4da84a6bfc70c3b8eebbe-791757.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_6957885646392685186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9SGC9Nq1f3pMRnHzJucvgByAGRbFgFocF7mOPW83tdT2M2MGlFr-xV8i0rfrcXHqbLUY3P5DHcJObzOIffKO4HcedWW2U90l_HPjGabq0AQTC9faAGsebzX632hjk27Panip0GGTCsvY/s320/9c6afaaf6ce4da84a6bfc70c3b8eebbe-791757.png" /></a></div><div><br /></div><div>3.更新參考並存檔,如下圖</div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0oX-9mMxf2dJ0jsxQGsr14GyjvulERgsXq3l0IPi1_jbjlugSIrB79Q-kpalJMcMo_wRrZJp8pmVRrQYvpexL3hJe7LZ5Sds_S_5vpe5z9hlMlLCRi8jJxN1pcX_i1KiaQlhrJQbP_Tc/s1600/5d8ef2f136ab42aa331826e0bceeacf9-794880.png"><img border="0" height="366" id="BLOGGER_PHOTO_ID_6957885659897016226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0oX-9mMxf2dJ0jsxQGsr14GyjvulERgsXq3l0IPi1_jbjlugSIrB79Q-kpalJMcMo_wRrZJp8pmVRrQYvpexL3hJe7LZ5Sds_S_5vpe5z9hlMlLCRi8jJxN1pcX_i1KiaQlhrJQbP_Tc/w640-h366/5d8ef2f136ab42aa331826e0bceeacf9-794880.png" width="640" /></a></div><div><br /></div><div>4.查看xxxxClient.cs,是否已更新</div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAQcWY97-Czhoj81tB78RAqNmWaQhwbaZoMIMiB6FpIb9VDU3R_TzpYvS1XX5pJc9y4xdvIwDsuoqln-YAMQXEFaj4lDUxrUmVuCG0uLOWfnICHd3bmF7oKEDd86vB26QXue2GvVAADbE/s1600/dee7b795e16ebb77b822ff0f3a45f08c-798289.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_6957885673872174642" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAQcWY97-Czhoj81tB78RAqNmWaQhwbaZoMIMiB6FpIb9VDU3R_TzpYvS1XX5pJc9y4xdvIwDsuoqln-YAMQXEFaj4lDUxrUmVuCG0uLOWfnICHd3bmF7oKEDd86vB26QXue2GvVAADbE/s320/dee7b795e16ebb77b822ff0f3a45f08c-798289.png" /></a></div><div><br /></div><div><span style="color: #1aade0; font-size: 12pt;">其它參考</span></div><ul><li><div><a href="https://note.kimx.info/2020/04/nswag-studio-apiclient.html">https://note.kimx.info/2020/04/nswag-studio-apiclient.html</a></div></li></ul></div></div> <img src="https://www.evernote.com/etpa/2aa85900-3e0f-4842-ad57-cb0762a1afb3" style="height: 1px; width: 1px;" /> Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-43751537150330181892021-01-07T15:10:00.001+08:002021-01-07T15:10:19.087+08:00SQL Server -使用資料層應用程式匯出/匯入<div class="ennote"><div><span style="color: #1aade0; font-size: 12pt;">前言</span></div><div><br /></div><div>前陣子將自己寫的一個Side Project的資料庫放在網路上的<a href="https://freeasphosting.net/">免費空間</a>,這兩天想要把資料備份下來。網站有提供Export Data,但我試了沒用。使用.bak的方式備份,檔案會備份在免費空間的主機上,無法下載...昏。</div><div><br /></div><div><br /></div><div><span style="color: #1aade0; font-size: 12pt;">解決方式</span></div><div><br /></div><div>之前記得同事有提過,資料庫在SSMS使用 bacpac 進行備份/還原。試了一下果然可以,備份的檔案可以直接存在用戶端的電腦上。</div><div><br /></div><div><b><font style="font-size: 12pt;">匯出</font></b></div><div><br /></div><div>1.匯出資料層應用程式</div><div><br /></div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyfrX6lgALDT0Ir_6vtsmQaOy0M_hAvT9DrhBAYE6rUWjEGgmbkNf2uYDBmoXlyXQWXU131ajq7zRuHPCoExNcyAcBZLWtxf-VeI1QG_ozXFtjW5Kh-JXQrxycULaTfGW5xKaojE7kCAM/s1600/63ccd65a5656d10d6c4baae6ea58c88c-746592.png"><img border="0" id="BLOGGER_PHOTO_ID_6914906142097162882" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyfrX6lgALDT0Ir_6vtsmQaOy0M_hAvT9DrhBAYE6rUWjEGgmbkNf2uYDBmoXlyXQWXU131ajq7zRuHPCoExNcyAcBZLWtxf-VeI1QG_ozXFtjW5Kh-JXQrxycULaTfGW5xKaojE7kCAM/s16000/63ccd65a5656d10d6c4baae6ea58c88c-746592.png" /></a></div><div><br /></div><div>2.選擇本地位置</div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkET5xIRreqvdzRgNPdftyHwKD1BK4i5Fcx7Fz-y4GTfnLtNzWH5N86Ob0dxK3MEwN8x_BQLH9gfJBZ0NE5LxhveE6H0_2c6tiGrFaeUdgUJIFyWn3BuGLX372uTWSMgWasGfam6PNmB0/s1600/a108e40a56bed90b4c56ef80e8012294-749777.png"><img border="0" id="BLOGGER_PHOTO_ID_6914906151953457634" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkET5xIRreqvdzRgNPdftyHwKD1BK4i5Fcx7Fz-y4GTfnLtNzWH5N86Ob0dxK3MEwN8x_BQLH9gfJBZ0NE5LxhveE6H0_2c6tiGrFaeUdgUJIFyWn3BuGLX372uTWSMgWasGfam6PNmB0/s16000/a108e40a56bed90b4c56ef80e8012294-749777.png" /></a></div><div>下一步確認後,會完整將Schema及資料匯出。</div><div><br /></div><div><font style="font-size: 12pt;"><b>匯入</b></font></div><div><br /></div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPgksXQ-JkUCkfzCG34Wrw8LAheSp5xpsKVPKfxKyT3ECsVBsPlrlYpxYn55sI8Wn8wkZ72YoCkVs99H39nWHAXKLJyHSs9cl4ZqODygubMIylZvZpiTFJL0h6ivjyJ7bZN-rdBX6KX2g/s1600/f5ee26ae19651b4acecb470bfcc56d69-752675.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_6914906168160685954" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPgksXQ-JkUCkfzCG34Wrw8LAheSp5xpsKVPKfxKyT3ECsVBsPlrlYpxYn55sI8Wn8wkZ72YoCkVs99H39nWHAXKLJyHSs9cl4ZqODygubMIylZvZpiTFJL0h6ivjyJ7bZN-rdBX6KX2g/s320/f5ee26ae19651b4acecb470bfcc56d69-752675.png" /></a></div><div><br /></div><div>選擇匯出後的資料層應用程式</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitRZ7552Hb0ApSpCzHtAIEtCvumeUbtEZfNG5ISsZDAG7fDH8uJJrgVddthL7IrLX3tl-Ht4kcy2dplbLHKWEI5_cW2KPpuzZU-KK5H2KRPGi0_b-c4lAQfENKq5AFX9e8ut4L0o9fZak/s833/import.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="459" data-original-width="833" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitRZ7552Hb0ApSpCzHtAIEtCvumeUbtEZfNG5ISsZDAG7fDH8uJJrgVddthL7IrLX3tl-Ht4kcy2dplbLHKWEI5_cW2KPpuzZU-KK5H2KRPGi0_b-c4lAQfENKq5AFX9e8ut4L0o9fZak/s16000/import.png" /></a></div><br /><div><br /></div><div><br /></div><div>指定資料庫名稱及位置</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJIZoMKD_3GZNx5-V0U5ZXlQhxYn4nVyFxkwEvn81XoDTxLg0l_6AmQwIAxjblI_FtAgGyDJwQF0S8YL99S1Ef1waJcQAtHaQZTUtpRfQHlf8myJy-qyAMqjPL4JKwpzXb4FKYfx0WhjI/s737/data.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="644" data-original-width="737" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJIZoMKD_3GZNx5-V0U5ZXlQhxYn4nVyFxkwEvn81XoDTxLg0l_6AmQwIAxjblI_FtAgGyDJwQF0S8YL99S1Ef1waJcQAtHaQZTUtpRfQHlf8myJy-qyAMqjPL4JKwpzXb4FKYfx0WhjI/s16000/data.png" /></a></div><br /><div><br /></div><div><br /></div><div>確認後,資料庫匯入成功</div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg231TO09vvSHBPFg245POme6bqg-1AHpdIDSPRLt2wbbKz2y-XcdukufqOp0AcNxr_w7EqoR_rHrv1P4IqLf2VygbHgxjg5z74CLA-ZMmK1wbPKzJ-63pNJybQGimBNS0U_Q-PJtX8uQ/s1600/814340b2cea0db98f434303f3bccfe93-755548.png"><img border="0" id="BLOGGER_PHOTO_ID_6914906180982912194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg231TO09vvSHBPFg245POme6bqg-1AHpdIDSPRLt2wbbKz2y-XcdukufqOp0AcNxr_w7EqoR_rHrv1P4IqLf2VygbHgxjg5z74CLA-ZMmK1wbPKzJ-63pNJybQGimBNS0U_Q-PJtX8uQ/s16000/814340b2cea0db98f434303f3bccfe93-755548.png" /></a></div><div><br /></div><div><font style="color: #1aade0; font-size: 12pt;">參考連結</font></div><div><br /></div><div><a href="https://docs.microsoft.com/zh-tw/sql/relational-databases/data-tier-applications/import-a-bacpac-file-to-create-a-new-user-database?view=sql-server-ver15">https://docs.microsoft.com/zh-tw/sql/relational-databases/data-tier-applications/import-a-bacpac-file-to-create-a-new-user-database?view=sql-server-ver15</a></div><div><br /></div></div> <img src="https://www.evernote.com/etpa/be6234f1-e642-4545-b518-ff227897f7ce" style="height: 1px; width: 1px;" /> Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.comtag:blogger.com,1999:blog-2353853696763524362.post-60976749647324630982020-12-14T17:08:00.001+08:002020-12-14T17:08:13.597+08:00Jenkins-無法儲存工作設定<div class="ennote"><div><div><span style="color: #1aade0; font-size: 12pt;">問題</span></div><div><span style="font-size: 12pt;"><br /></span></div><div>同事回報CI工作發行錯誤,原因為建置參數遺失...。此工作只有在昨天Jenkins更新到2.69後,修改了Pipeline的語法而已,查詢工作設定後,發現原本的參數設定不見了....變成未設定的狀態.</div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjezgU9A50wZymM_iVlKFNS62zRqLA-xXML0Z3n0MBX6D5FgereFstqpRwjVBljC5L2fABXsKKVIoD3JwqRyjOo1ewq9BthUxkHGa9PQ9wPIYZ0QUhdJS0dhiAv5y0zlnIjffQolthKb6o/s1600/d68e55efa657432d86154bc2b7898787-713178.png"><img border="0" id="BLOGGER_PHOTO_ID_6906036031480540914" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjezgU9A50wZymM_iVlKFNS62zRqLA-xXML0Z3n0MBX6D5FgereFstqpRwjVBljC5L2fABXsKKVIoD3JwqRyjOo1ewq9BthUxkHGa9PQ9wPIYZ0QUhdJS0dhiAv5y0zlnIjffQolthKb6o/s16000/d68e55efa657432d86154bc2b7898787-713178.png" /></a></div><div>測試其他如trigger build等其他的設定,儲存後也都會不見....昏</div><div><br /></div><div><span style="color: #1aade0; font-size: 12pt;">除錯過程</span></div><div><br /></div><ol><li><div>本以為是Jenkins 2.69更新的問題,所以就先<a href="https://issues.jenkins.io/browse/JENKINS-64378">回報議題</a>,過了一天收到了回覆,開發人員使用相關環境測試,是沒問題的....。</div></li><li><div>為確定是否為Java runtime或是環境等問題,我重新安裝最新的及舊版Jeknins,測試結果正常</div></li><li><div>將主機的Jenkins還原到我本機來測試後,<b><font style="color: red;">問題一樣存在</font></b>.....。</div></li><li><div>在確定與主機環境一致後,再比對兩邊的檔案後,差異的只有Plugin,所以我先將測試正常的Plugin替換到目前有問題的Jenkins下,果然一測試就正常了....。</div></li></ol><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSmQz1MJ0fSJOLhA2_5vqT7A3583U5H8yGh40LsWjExwDwi07FE_voQ_SsVZnFPijv8rikuLXvWGm5tVYAZOY7Af6yZ2AVIYtSwsKwfOjy5bRG_62R-l1Qpzz_uSsSlGl28gjrkbO0Rjg/s1600/93b783707069e162881505201e2601f4-716673.png"><img border="0" id="BLOGGER_PHOTO_ID_6906036052363204322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSmQz1MJ0fSJOLhA2_5vqT7A3583U5H8yGh40LsWjExwDwi07FE_voQ_SsVZnFPijv8rikuLXvWGm5tVYAZOY7Af6yZ2AVIYtSwsKwfOjy5bRG_62R-l1Qpzz_uSsSlGl28gjrkbO0Rjg/s16000/93b783707069e162881505201e2601f4-716673.png" /></a></div><div>ps:此目錄只需要copy .jpi就可以使用了</div><div><br /></div><div><span style="color: #1aade0; font-size: 12pt;">解決方式</span></div><div><br /></div><div>在經由交叉比對、連番測試差異的plugin,終於找到了問題所在,一枚六年前安裝,目前已停止維護的<span style="color: red;">TFS Plugin</span>造成的。在Jenkins 更新至2.64之後,此Plugin會影響Jenkins的工作設定。</div><div>目前的版控已全部改成git,所以將它移除後,恢復正常。</div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidahtyExSHx9QSg5XhQa-pRyPUXPmL1JwvxxH3mMFpFw-sRCnOScJ6XSAxgYX2QyBM2Y5fD28EFZGuNrwkURHbf7YkBqaz430C1LoMPZuWnn7sTzkKs5dcu43y8ZTVvIvPkZDI_7ZOX0E/s1600/f2536483669c0bd82595a3bdff3e7fb2-720840.png"><img border="0" id="BLOGGER_PHOTO_ID_6906036067457249682" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidahtyExSHx9QSg5XhQa-pRyPUXPmL1JwvxxH3mMFpFw-sRCnOScJ6XSAxgYX2QyBM2Y5fD28EFZGuNrwkURHbf7YkBqaz430C1LoMPZuWnn7sTzkKs5dcu43y8ZTVvIvPkZDI_7ZOX0E/s16000/f2536483669c0bd82595a3bdff3e7fb2-720840.png" /></a></div><div><img src="https://www.evernote.com/etpa/b9cc43ff-fb58-41e8-8d0b-441a8972690d" style="height: 1px; width: 1px;" /></div></div></div>Kimxinfohttp://www.blogger.com/profile/06033739651743131387noreply@blogger.com