皮膚和DLL和圖片等項目文件完全整合到exe中


       C#開發的程序原生界面實在是太丑了,自己又沒有美化天賦,所以只能使用皮膚控件了,網上找到了IrisSkin2,包含一個.dll文件和若干ssk后綴的皮膚文件,代碼其實很簡單的。但是后來發現個問題,就是exe的運行必須有資源文件的支持,不然根本就打不開軟件,但我開發的100多K的小軟件實在沒必要這樣,是直接在桌面運行的那種,所以想到將全部的依賴文件整合到exe文件中,網上查找了很多資料,下面說下過程。

       首先是IrisSkin2的使用方法:

初始化皮膚:

      Sunisoft.IrisSkin.SkinEngine se = new Sunisoft.IrisSkin.SkinEngine();
      se.SkinAllForm = true;

設置皮膚:

      se.SkinFile="Skins/mdd_spring.ssk";

可以看到非常簡單,調換皮SkinFile的值就可以更換皮膚了,所有的皮膚名稱我放在一個Combox中。

        下面是將文件整合:

        將Properties\Resources.resx文件打開,在“添加資源”-“添加現有文件”,選擇皮膚文件就行了,Resources.resx這個文件本身是包括在exe中的

        其后是調用的問題:

        有兩種調用方式:Properties.Resources.名稱         Properties.Resources.ResourceManager.GetObject("名稱"),由於現在只知道名稱,所以使用第二種方式,返回式是Object類型,se.SkinFile是string類型,不兼容,SkinEngine還有一種設置皮膚的方法se.SkinStream,是Stream類型,所以要將Object轉化為Stream

         先強制轉化為byte[],然后轉化為Stream

      byte[] obj=(byte[])Properties.Resources.ResourceManager.GetObject(selectedValue);
      se.SkinStream = new MemoryStream(obj);

 

至於整個dll文件,網上的方法是:找到你引用的程序集的屬性,把 “嵌入互操作類型” 改成 true,我用的VS2008貌似沒有這個選項,VS2010的可以試下

另外一種方式:同樣把dll文件添加到Properties\Resources.resx文件中,然后再使用

      byte[] obj = (byte[])Properties.Resources.ResourceManager.GetObject(Properties.Resources.IrisSkin2);
      System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(buffer);     //Load assembly using byte array

Assembly.Load具體用法可參考:Assembly.Load 詳解

 

整合exe增加的大小基本就是添加東西的大小,如果誰有更簡便的方法請留下言


 

 

出處:http://blog.csdn.net/yz1311/article/details/17009151


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM