**簡介** 有時候我們在發佈程式時,不想讓客戶看到項目中的文件,這時就可以使用.NET的嵌入文件功能(虛擬文件)。在.NET中,虛擬文件(Virtual File)是一種特殊類型的文件,它們在編譯時被嵌入到程式集中,而不是作為獨立的文件存在於文件系統中。EmbeddedFile是指在編譯時將文件內 ...
簡介
有時候我們在發佈程式時,不想讓客戶看到項目中的文件,這時就可以使用.NET的嵌入文件功能(虛擬文件)。在.NET中,虛擬文件(Virtual File)是一種特殊類型的文件,它們在編譯時被嵌入到程式集中,而不是作為獨立的文件存在於文件系統中。EmbeddedFile是指在編譯時將文件內容嵌入到程式集中,並通過虛擬路徑來訪問的文件。
使用步驟:
1、嵌入的文件配置
首先將要嵌入的文件添加到項目中,我們在vs項目中新建一個名為"dotnet"的文本文件,並右鍵屬性設置其生成操作為 "嵌入的資源"。設置完成右鍵選擇項目 "屬性",然後在屬性視窗中 "生成" 選項來完成嵌入。如下圖:
生成後的文件夾是沒有這個文件,如下圖
2、文件說明
在代碼中可以使用虛擬路徑來訪問嵌入的文件。虛擬路徑是指通過程式集的命名空間和文件名來構建的路徑。例如,如果嵌入的文件名為 "dotnet.txt",它位於命名空間為 "Test7" 的程式集中,那麼虛擬路徑就是 "Test7.dotnet.txt"。
3、用C#代碼讀取嵌入文件
參考代碼如下:
using System;
using System.IO;
using System.Reflection;
using System.Text;
namespace Test7
{
class Program
{
static void Main(string[] args)
{
string embeddedFilePath = "Test7.dotnet.txt";
string fileContent = ReadEmbeddedFile(embeddedFilePath);
Console.WriteLine(fileContent);
}
static string ReadEmbeddedFile(string embeddedFilePath)
{
Assembly assembly = Assembly.GetExecutingAssembly();
//如果跨程式訪問或者不確定文件,這裡可以判斷文件流是否為null
using (Stream stream = assembly.GetManifestResourceStream(embeddedFilePath))
{
if (stream == null)
{
throw new Exception("Embedded文件未發現: " + embeddedFilePath);
}
using (StreamReader reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
}
}
}
在上面的示例中,`ReadEmbeddedFile` 方法通過虛擬路徑獲取嵌入的文件流,並使用 `StreamReader` 讀取文件內容。然後,將文件內容列印到控制台。
註意:虛擬文件的路徑是區分大小寫的,並且要正確地指定命名空間和文件名。此外,如果文件位於不同的程式集中,你需要使用正確的程式集名稱來構建虛擬路徑。
結語
本文講述了在 .NET Core 中使用虛擬文件(EmbeddedFile)的基本方法。當然你也可以將任意類型的文件(例如文本文件、圖像文件等)嵌入到程式集中,並以使用上面的方式指定虛擬路徑的方式訪問它們。它的好處是嵌入方便發佈程式,尤其是winform桌面類別的程式。希望本文對你有所收穫,歡迎留言或者吐槽!
參考:
1、learn.microsoft.com/zh-cn/dotnet/core/extensions/resources
2、chatgpt
來源公眾號:DotNet開發跳槽