.NET 透過 .resources 檔案與 ResourceManager / ResourceWriter 類別管理嵌入資源(圖片、字串、序列化物件等)。本文示範建立資源檔、寫入資源、編譯嵌入組件、執行時期讀取的完整流程。
using System.Resources;
using System.Drawing;
string resPath = "MyResources.resources";
using (ResourceWriter writer = new ResourceWriter(resPath))
{
writer.AddResource("Logo", Image.FromFile(@"F:\logo.png"));
writer.AddResource("AppTitle", "我的應用程式");
writer.AddResource("MaxConnections", 100);
writer.Generate(); // 寫入磁碟
}
Visual Studio 專案右鍵 → Properties → Resources → Add Existing File 選擇 .resources 檔,或手動編輯 .csproj:
<ItemGroup>
<EmbeddedResource Include="MyResources.resources" />
</ItemGroup>
using System.Resources;
using System.Reflection;
ResourceManager rm = new ResourceManager("MyResources", Assembly.GetExecutingAssembly());
// 讀取圖片
Image logo = (Image)rm.GetObject("Logo");
button1.Image = logo;
// 讀取字串
string title = rm.GetString("AppTitle");
// 讀取數值
int maxConn = (int)rm.GetObject("MaxConnections");
VS 內建資源設計器會自動產生 Resources.resx 對應的強型別類別 Properties.Resources:
// 直接以屬性存取,享有 IntelliSense 與型別安全
button1.Image = Properties.Resources.Logo;
string title = Properties.Resources.AppTitle;
Resources.resx(預設文化特性)Resources.zh-TW.resx、Resources.en-US.resx 等文化特性專用資源檔ResourceManager 會依 Thread.CurrentThread.CurrentUICulture 自動選擇對應資源GetObject("Logo") ≠ GetObject("logo")Copy to Output Directory 輸出至建置目錄,二者用途不同。