環境
- Visual Studio 2019 v16.4.1
- ASP.NET MVC 5
問題
更新 Visual Studio 版本後,找不到加入 MVC 的 Area 區域
解決方法
功能被整合至 New Scaffolded Item,步驟如下:
在專案上按右鍵 --> Add 加入,選擇 New Scaffolded Item
選擇 MVC 下的 Area,即可找到 MVC 5 Area
突然找不到功能,小驚慌了一下 XD
更新 Visual Studio 版本後,找不到加入 MVC 的 Area 區域
功能被整合至 New Scaffolded Item,步驟如下:
在專案上按右鍵 --> Add 加入,選擇 New Scaffolded Item
選擇 MVC 下的 Area,即可找到 MVC 5 Area
突然找不到功能,小驚慌了一下 XD
在 ASP.NET Core 的環境, 預設早已支援 Dependency Injection (依賴注入) 的設計模式, 但在 ASP.NET MVC 5 以前的專案沒有這樣的功能, 本篇簡單介紹如何使用 Unity.Mvc 套件來達成依賴注入。
安裝套件完成後,會自動在 App_Start 加入 2 個檔案: UnityConfig.cs
及 UnityMvcActivator.cs
基本上所有的啟動功能它都做完了, 我們只要針對 UnityConfig.cs
這個檔案加入我們的註冊的類型即可
例如:
如果有忘記註冊的類型, 卻被使用到了, 即會出現以下的錯誤訊息
在 constructor 使用 interface 即會自動注入對應的實體
是不是很方便呢? 前人種樹, 後人乘涼, 現在只要專注去做自己該對應的相關程式, 多餘的設定全都被妥當安排了。 不知道是不是因為它太簡單使用了, 所以專案連 README 文件都沒寫 XD。 所以寫一篇用法以備不時之需, 個人覺得這是目前用過最簡易使用的套件了, 因為幾乎無痛使用啊!!
範例程式: UnityMvcDemo1
在新建立的 Web 專案中, 採用 Entity Framework 6.3.0 版本, 執行 migration 時出現 Path 為空值的錯誤
Enable-Migrations : Cannot bind argument to parameter 'Path' because it is null.
降版至 EF 6.2.0
至於修正版本, 將會在 6.4.0 時修正並釋出, 所以 6.3.0 就直接跳過不要用吧!!
在 VS Code 開啟終端機時, 命令視窗是跳出式而非內嵌在 VS Code 內
開啟設定,搜尋 conpty 把選項 Terminal > Integrated: Windows Enable Conpty 勾消即可
最近有一個小小的 PHP 專案,資料量不大,我想直接用 Azure 的 Web App 搭用 SQLite 可攜式資料庫做應用
開個資料庫太殺雞用牛刀,而且資料庫開下去都是要 $$ 的
在部署上去之後發現 PDOException,當然就是連不上我要用的 SQLite 資料庫啦!
那該怎麼辦呢?找方法把缺的模組補上去吧!
Azure Web App - Windows
PHP 版本
下載 PHP for Windows 對應的版本 (NTS x86 版本), 需要加的模組 *.dll 上傳至 ext
目錄
其實我只需要 php_pdo_sqlite.dll 就好,但要試就一次定位吧~
在 ini
目錄增加 extensions.ini
檔案
extensions.ini
內容如下
extension=d:\home\site\ext\php_pdo_sqlite.dll
extension=d:\home\site\ext\php_sqlite3.dll
名稱:PHP_INI_SCAN_DIR
值:d:\home\site\ini
儲存後,記得重新啟動網站以載入模組設定
在主控台上鍵入: php -m
列出模組,有看到 pdo_sqlite
及 sqlite3
就表示正確載入囉!
終於網站可以確定讀到資料,完成!
一直以來這亂碼問題遇到的重覆不下 N 次,後來看到 SQLSTATE[HY000] [2002]
的錯誤代號,可以直覺反應就是連不到資料庫
Trace 出來的錯誤訊息實際是長這個樣子的,這是因為 MySQL 預設輸出錯誤訊息的是以 UTF-8 輸出,而非二進制的字符字串值從其字符集轉換為 UTF-8 就產生像以下的編碼狀況
mysqli_connect(): (HY000/2002): \xb5L\xaak\xb3s\xbdu\xa1A\xa6]\xac\xb0\xa5\xd8\xbc\xd0\xb9q\xb8\xa3\xa9\xda\xb5\xb4\xb3s\xbdu\xa1C\r\n
我們看顯示的樣子就像下圖,以使用者端來看就是有點不開心
用 mb_convert_encoding 的方式,先將取得編碼訊息轉成 utf-8 (以繁體中文的來說就是 big5)
如此就能正常顯示中文訊息啦
一般來說,開發人員的機器總是會安裝最新版本的 PHP 來開發
但是總是會有久遠要維護的專案,而 PHP 版本可能也是久遠的舊版本
如果想透過 Composer 來管理套件,但又想要限制特定支援的安裝版本套件,那該怎麼辦呢?
開發環境用 PHP 7.3,維護專案採用 PHP 5.6.1
在不變更開發環境的 PHP 版本之下,專案更新套件時會下載到最新的版本
在 Composer 有個方便的設定
composer.json
只要在 config 加上 platform 的 php 版本即可
...
"config": {
"platform": {
"php": "5.6.1"
}
},
...
也可用指令方式來下命令達到一樣的效果
composer config platform.php 5.6.1
修改 composer.json 後執行更新,即會做降版動作
$ composer update
以前寫過一篇是用 Sublime 開啟 Tracy 偵錯的檔案: 善用工具 -- Tracy 讓 PHP Debug 變簡單了
現在都用 VS Code 或 PhpStorm 來寫 PHP 專案
來記錄一下怎麼使用 VS Code 來開啟 Laravel-Tracy 偵錯到的檔案
Protocol: vscode://file/%file:%line
Tracy 的設定如下
// Visual Studio Code
Tracy\Debugger::$editor = 'vscode://file/%file:%line';
Laravel-Tracy 的設定如下 (config/tracy.php
)
以下為各個瀏覽器用 VS Code 來開啟檔案的對話視窗
Microsoft Edge
Chrome
Firefox
Kotlin 快速入門第一發: 一定要來寫一下 Hello World
下載 Command Line Compiler v1.3.31
下載解壓後指定系統環境路徑至 kotlinc/bin
確認版本指令:
$ kotlinc -version
輸出如下就表示可以正確執行 CLI
info: kotlinc-jvm 1.3.31 (JRE 1.8.0_152-b16)
建立一個 hello.kt
檔案
fun main(args: Array<string>) {
println("Hello, World!")
}
編譯檔案
$ kotlinc hello.kt -include-runtime -d hello.jar
執行
$ java -jar hello.jar
輸出結果
Hello, World!
很久沒寫 Java,只是最近一直聽到 Kotlin 就來玩一下~
事情發生在 clone 專案編譯執行後發生的。以前曾經也發生過,但不記錄還是會忘了解法,趁現在遇到了,快記一下!
ASP.NET MVC 專案在 git clone 下來編譯後執行網站出現:System.IO.DirectoryNotFoundException: 找不到路徑 'bin\roslyn\csc.exe' 的一部分
開啟專案 *.csproj
檔,加上 Target 的 AfterTargets 設定
<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'"> | |
<ItemGroup> | |
<RoslynFiles Include="$(CscToolPath)\*" /> | |
</ItemGroup> | |
<MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" /> | |
<Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" /> | |
</Target> |
今天在專案中要產生 *.ics 的日曆數據交換檔案提供下載
打鐵趁熱記錄一下,以免又要石沈大海
目前採用的是在 NuGet 的 Ical.Net 套件, 版本 v4.1.10
在 Windows 10 的行事曆開啟 *.ics 的呈現內容
public class CalController : ApiController | |
{ | |
public HttpResponseMessage Get() | |
{ | |
// 套件: https://www.nuget.org/packages/Ical.Net/ | |
CalendarEvent calEvent = new CalendarEvent | |
{ | |
DtStart = new CalDateTime(DateTime.Today), | |
DtEnd = new CalDateTime(DateTime.Today.AddHours(3)), | |
Summary = "會議標題", | |
Description = "會議簡述文字", | |
Location = "台中市" | |
}; | |
// 產生 iCalendar 格式 | |
var iCal = new Calendar(); | |
iCal.Events.Add(calEvent); | |
var serializer = new CalendarSerializer(); | |
string output = serializer.SerializeToString(iCal); | |
// 下載輸出 | |
var response = new HttpResponseMessage(HttpStatusCode.OK); | |
response.Content = new StringContent(output); | |
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/calendar"); | |
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); | |
response.Content.Headers.ContentDisposition.FileName = HttpUtility.UrlPathEncode($"ical_{DateTime.Now:yyyyMMdd}.ics"); | |
return response; | |
} | |
} |
在佈署網站時總會遇到一些眉眉角角的問題
今天到客戶要求的主機上佈署網站,出現:「此憑證鏈結是由不受信任的授權單位發出的。」 的錯誤訊息
訊息:[SqlException (0x80131904): 與伺服器的連接已成功建立,但在登入程序時發生錯誤。 (provider: SSL Provider, error: 0 - 此憑證鏈結是由不受信任的授權單位發出的。)]
看起來資料庫連線沒問題,只是在登入步驟出了差錯。SSL Provider 提供重要線索,首先檢查連線字串~
原本測試站是用 Azure 的 Database 服務,連線字串包含 Encrypt=True;TrustServerCertificate=False;,但客戶主機不適用,拿掉就可以正常連線了!
除錯任務完成,特此記錄一下!
console.log("Hello Markdown Syntax");
記得撰寫用 HTML 並在第一行上加上 markdown
<script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/1.9.0/showdown.min.js"></script> | |
<script> | |
var converter = new showdown.Converter(); | |
var posts = document.querySelectorAll(".post-body"); | |
Array.prototype.forEach.call(posts, function(el, i){ | |
if (el.innerHTML.indexOf("markdown") <= 1) { | |
el.innerHTML = converter.makeHtml(el.innerHTML.replace("markdown","")); | |
} | |
}); | |
</script> |
最近在帶 Laravel 工作坊,有許多學員為非程式開發人員,在入門程式開發的過程中。要把開發環境設定完成,若不透過手把手帶領,可能要繞很大圈才有辦法完全設定完畢。
由於 Laravel 這個框架的底程程式語言為 PHP。就以 PHP 的開發環境來跟 Visual Studio Code 做整合介紹。
以 Visual Studio Code 為我們整合的開發環境:Git, Terminal, PHP 的整合設定
這次介紹主要以 Windows 的作業系統平台來做範例。當然大多數的 Visual Studio Code 設定也適用於 Mac,只是在 Mac 的設定上會少很多 (主要是 Terminal 以 bash 為主,PHP 及 Git 的路徑設定在安裝完時已經 Ready 了)