ScintillaNET 載入失敗:找不到指定的模組

記錄一個可能比較少碰到的問題:ScintillaNET 載入失敗,錯誤訊息是「找不到指定的模組」。


我把某專案更新至 .NET 6 之後,嘗試把新版應用程式部署至 Windows 11 的 Sandbox,結果程式一執行就出現錯誤訊息:「找不到指定的模組。」如下圖:



這個錯誤訊息沒有提供足夠資訊,無從判斷是哪一個 DLL 檔案找不到。當下只能確定,是在應用程式的主視窗載入時便發生這個錯誤,而且我也確定 .NET 6  runtime 已經有事先安裝好,應用程式的相依套件也有部署。


後來,我寫了一個簡單的 Windows Forms 程式來測試,在主視窗上面放一個按鈕,而且當按鈕按下時,才建立 Scintilla 控制項:


    private void button1_Click(object sender, EventArgs e)
    {
        scintilla = new Scintilla();
        Controls.Add(scintilla);
    }


將此程式部署到 Windows 11 Sandbox 環境上執行,點擊按鈕之後,同樣也是出現錯誤訊息,但這次有明確指出是哪個 DLL 無法載入:SciLexer.dll。如下圖:



從錯誤訊息可知,Scintella 控制項會嘗試到當前使用者個人帳戶的 AppData\Local\Temp\ScintillaNET\.... 子目錄載入 SciLexer.dll。


有了上述線索之後,嘗試用一些關鍵字搜尋,找到了原作者 GitHub 專案的第 407 號問題單,有人碰到相同的狀況。該問題單下方有作者回覆,指向一個解決方法:Using a Custom SciLexer.dll。然而,使用那個方法也無法解決我碰到的問題。


至此案情大致調查完畢,可以確定我碰到的狀況是因為在 Windows 11 沙箱環境中執行應用程式時,因某種不明原因,使得 Scintella 無法順利讀取使用者個人帳戶的暫存資料夾底下的 SciLexer.dll。我在測試應用程式時到那個資料夾查看,確認有自動產生 SciLexer.dll(內嵌於 Scintella.DLL),但卻因為某種不明原因而無法讀取檔案。


我在其他 Windows 環境上測試都沒有這個問題,而只有 Windows 11 沙箱環境才會出現。也許這個問題並不會在一般 Windows 環境出現,故先記錄下來,若將來發現其他線索,再回來更新。


備註:本文已同布發表於我的 GitHub Wiki

沒有留言:

技術提供:Blogger.
回頂端⬆️