問題 - C# 專案輸出成 DLL 後,卻找不到檔案

[問題] C# 專案輸出成 DLL 後,卻找不到檔案

近期為了與大專案整合,將自己的專案輸出成 DLL,但當遇到開檔讀檔時卻找不到,原來是輸出的 DLL 中並不包含程式內讀取的檔案資源,所以當然找不到

問題描述 :

輸出的 DLL 中並不包含程式內讀取的檔案資源,這很簡單解決,只要在檔案屬性將建置動作改為 內嵌資源Resource,兩者會讓程式在編譯時就一併把檔案包進去 DLL 中

但真正問題來了,包進去之後,怎麼去讀取檔案呢?

若是用原本的讀取絕對路徑或相對路徑的開檔讀檔也是抓不到檔案呢,因為檔案嵌進 DLL 中了,DLL 也會依位置不同而改變本身的路徑

解決問題 :

這裡對於 內嵌資源Resource 有個別的方式解決

  • 內嵌資源

    • 這種方式並無法通過 Uri 來找到我們要的資源
    • 必須使用反射的技巧來讀取資源

      1
      2
      3
      4
      5
      6
      7
      string FilePath = "專案名稱.( 資料夾 ).檔案";

      Assembly assembly = Assembly.GetExecutingAssembly();
      //依據檔案內容來選擇編碼,也可以不傳參用預設
      StreamReader streamreader = new StreamReader(assembly.GetManifestResourceStream(FilePath), System.Text.Encoding.GetEncoding("Big5"));

      string FileContent = streamreader.ReadToEnd();
  • Resource

    • 這種方式可以通過 Uri 來找到資源

      1
      string FilePath = "pack://application:,,,/專案名稱;component/( 資料夾 )/檔案";
tags: 問題 輸出 DLL 內嵌資源 Resource
Author: Kenny Li
Link: https://kennyliblog.nctu.me/2020/12/19/Csharp-make-DLL-file-problem/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.