在編程過程當中遇到下面這樣一個問題:web
有這樣一個方法:編程
public static AlphaImage CreateFromResource(string imageResourceName) { MemoryStream stream = (MemoryStream)Assembly.GetCallingAssembly().GetManifestResourceStream(imageResourceName); return CreateFromStream(stream); }
在調用的時候老是獲得stream是null.爲何呢?架構
看看咱們的調用和程序的架構:工具
bgPixBox.Image = AlphaImage.CreateFromResource("AlphaMobileControls35Test.Resources.Wallpaper.jpg"); alphaPictureBox1.Image = AlphaImage.CreateFromResource("AlphaMobileControls3.5Test.Resources.Toolbar.png"); btn1.BackgroundImage = AlphaImage.CreateFromResource("AlphaMobileControls3.5Test.Resources.Btn1.png"); btn1.ActiveBackgroundImage = AlphaImage.CreateFromResource("AlphaMobileControls3.5Test.Resources.Btn1_Pushed.png"); btn1.DisabledBackgroundImage = AlphaImage.CreateFromResource("AlphaMobileControls3.5Test.Resources.Btn1_Disabled.png");
程序架構:spa
上面的方法本沒有錯,調用也徹底沒有錯,但是爲何就是不成功呢?你們看上面架構的項目名稱,默認的狀況下命名空間和項目名稱是同樣的,所以上面的調用就出錯了.解決方法法,把命名空間中帶」.」(點)的都去掉,這樣就ok。由於命名空間中帶點會讓上面的方法在找路徑時找不到。.net
VB.Net中資源的名稱爲:項目默認命名空間.資源文件名插件
C#中則是:項目命名空間.資源文件所在文件夾名.資源文件名orm
用GetManifestResourceStream獲取的資源要保證包含在工程中,不包含在工程中即便在同一目錄下也沒用。包含在工程中之後把該文件的「屬性」中的「生成操做」改成「嵌入的資源」。就能夠用了xml
經過GetManifestResourceNames(好像是這個名字)把全部的名字都取出來,而後看看有沒有你要的。通常是Assembly名.類名.Manifest.Resource。htm
// 獲取當前類庫的程序集 Assembly assembly = Assembly.GetExecutingAssembly(); // 從程序集中讀取插件的菜單和工具欄配置信息(xml文件內容)TestPlugin.Properties.Resources Stream stream = assembly.GetManifestResourceStream(「資源文件名稱」);
上面的解決方案再wince中同樣可使用。
歡迎訪問個人另外一個站點: GetManifestResourceStream獲得的Stream是null的解決