首先提出幾個問題:app
★、資源是什麼?分類?它的做用是什麼?ui
★、資源在可執行文件中的存在形式是什麼?this
★、資源編譯到文件中的過程是怎麼樣的?spa
★、多個資源在可執行文件中的分佈狀況是怎麼樣的?相同的類型的多個資源呢?不一樣類型的資源呢?.net
★、程序怎麼使用在可執行文件中的資源?rest
★、資源在VS中的使用資源code
資源是在邏輯上由應用程序部署的任何非可執行的數據。比較常見的是應用程序的圖標,光標,一些控件或者窗體上的位圖。orm
資源包括 字符串、圖像和持久的對象。對象
資源在可執行文件或者程序集中是以二進制的形式存在的。blog
資源在不一樣的文件中的存在形式不同,在PE文件中和程序集中形式不一樣。
把資源編譯到可執行文件或者程序集中,有一個通用的過程。準備好源資源,好比字符串、圖片等;在文件文件中按照語法格式編寫腳本文件,不一樣的資源編譯程序對應不一樣的語法格式;資源編譯器把腳本文件和準備好的資源編譯成二進制文件;語言編譯器把上步的二進制文件編譯到可執行程序或者程序集中。
在可執行文件或者程序集中添加資源時,有不一樣的具體的方式。微軟給出5種在.net下的桌面應用程序中操做資源的方法;在這裏。
.net中的資源。資源腳本 文件有兩種形式:存在於文本文件.txt 或 .restext,存在於.resx文件;資源編譯器編譯後的二進制資源文件.resource;變化過程以下:
第二個參考:http://msdn.microsoft.com/zh-cn/library/ccec7sz1%28v=vs.110%29.aspx
在VS2005中。
加入外部圖形資源文件引發的工程文件的變化
手動加入資源文件
加入外部圖形資源文件引發的工程文件的變化
當用PictureBox組件的屬性--Image添加資源文件時,經過「項目資源--導入」的方式加入,這樣資源文件就在編譯時直接合成的.exe或者.dll文件中了。所引發的文件變化有:
一、Properties文件夾下Resources.resx文件中添加了一項:腳本 文件。
1 <data name="xinggefenxi2013.03.13" type="System.Resources.ResXFileRef, System.Windows.Forms"> 2 <value>..\Resources\xinggefenxi2013.03.13.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> 3 </data>
name=""表明外部資源的代號;<value>中有路徑是 *.jpg文件。後面應該是對此文件的說明吧。
二、Properties文件夾下Resources.Designer.cs文件中添加了以下項:
1 internal static System.Drawing.Bitmap xinggefenxi2013_03_13 { 2 get { 3 object obj = ResourceManager.GetObject("xinggefenxi2013.03.13", 4 5 resourceCulture); 6 return ((System.Drawing.Bitmap)(obj)); 7 }
這是經過資源代號來獲得對應的資源,這是一個靜態的屬性。屬性名是xingefenxi2013_03_13.
三、Form1.Designer.cs窗體配置文件中,變化以下:
1 // 2 // pictureBox1 3 // 4 this.pictureBox1.Image = global::Winform窗體資源的使用.Properties.Resources.xinggefenxi2013_03_13;//主要是這句 5 this.pictureBox1.Location = new System.Drawing.Point(-3, 0); 6 this.pictureBox1.Name = "pictureBox1"; 7 this.pictureBox1.Size = new System.Drawing.Size(559, 414); 8 this.pictureBox1.TabIndex = 0; 9 this.pictureBox1.TabStop = false;
其中一句是訪問上面的屬性的。
手動加入資源文件
經過上面三個地方的變化,能夠手動添加一個外部資源文件,並最終編譯到文件exe或者dll中。過程以下:
一、Properties文件夾下Resources.resx文件中
1 </data> 2 <data name="test" type="System.Resources.ResXFileRef, System.Windows.Forms"> 3 <value>..\Resources\11.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> 4 </data>
直接添加一項,注意那個路徑11.png要對應上。
二、Properties文件夾下Resources.Designer.cs文件中
1 internal static System.Drawing.Bitmap gg{ 2 get { 3 object obj = ResourceManager.GetObject("test", resourceCulture); 4 return ((System.Drawing.Bitmap)(obj)); 5 } 6 }
屬性名設置爲gg
三、這時就能夠在代碼中獲得屬性對應的資源了,在一個Button的事件中
1 private void button1_Click(object sender, EventArgs e) 2 { 3 pictureBox2.Image = global::Winform窗體資源的使用.Properties.Resources.gg; 4 }
結果就能動態顯示圖片了。而且把.exe移動到其餘文件夾下也能夠正常顯示,可見已經植入到程序中了。
添加光標文件
只在Resources.resx中添加腳本代碼:
<data name="cursor" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\chat.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data>
編譯後就會自動生成:
1 internal static System.Drawing.Icon cursor { 2 get { 3 object obj = ResourceManager.GetObject("cursor", resourceCulture); 4 return ((System.Drawing.Icon)(obj)); 5 } 6 }