六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

在dotnet中如何使用資源

[摘要]如何使用資源文件--------------------------------------------------------------------------------摘要.NET 中有一套非常完善的地方化系統(tǒng)被定義在 System.Resources 名字空間中。不過大多數(shù)人都被 Mis...
如何使用資源文件

--------------------------------------------------------------------------------

摘要
.NET 中有一套非常完善的地方化系統(tǒng)被定義在 System.Resources 名字空間中。不過大多數(shù)人都被 MissingManifestResourceException 這個(gè)錯(cuò)誤困惑著。本文就是要讓大家了解什么是資源文件,它有什么用處以及如何正確的調(diào)用從而避免一些"奇怪"的錯(cuò)誤,包括 MissingManifestResourceException 這個(gè)常見錯(cuò)誤。

--------------------------------------------------------------------------------

目錄
本文來源以及最終目的
什么是資源文件
資源文件類型
調(diào)用資源文件的幾種方法
如何準(zhǔn)確的定義資源文件的邏輯位置
推薦工具
總結(jié)
參考信息
關(guān)于作者

--------------------------------------------------------------------------------

本文來源以及最終目的
最近作者在新聞組中看到許多有關(guān)資源文件的問題,而大多數(shù)人都有 MissingManifestResourceException 這個(gè)非常時(shí)髦的錯(cuò)誤。所以作者考慮了一下,決定不想再讓更多的人把時(shí)間都浪費(fèi)在這個(gè)問題上了。這就是這篇文章的誕生原因。而最終目的除了讓這個(gè)問題在新聞組上消失之外還要讓大家在 10 分鐘內(nèi)徹底掌握資源的調(diào)用,從而成為真正的資源高手!:)

--------------------------------------------------------------------------------

什么是資源文件
在 .NET 中準(zhǔn)備 World-Ready 程序時(shí)需要三步,Globalization,Localizability 和 Localization。在這第三步的 Localization 中就是使用資源文件最常見的地方。(本文不討論 World-Ready 程序,或許以后在另一篇文章中)因?yàn)槌绦虻倪壿嫿缑嫘枰c資源界面隔離,而資源界面就是我們所說的資源文件。顧名思義,一個(gè)資源文件中當(dāng)然全是資源,不過,什么是資源?這里所謂的資源就是程序中可利用的數(shù)據(jù),譬如:字符串、圖片和任何二進(jìn)制數(shù)據(jù),包括任何類型的文件。注意一個(gè)資源文件可以有多種語言版本,舉例,一個(gè) Strings.resources 文件可以有英語版、簡體中文版、繁體中文版等。 ResourceManager 可以自動(dòng)根據(jù)文件名來確認(rèn)調(diào)用哪個(gè)版本。不同的版本只要在文件名中添入?yún)^(qū)域語言就可以了。比如,我們的 Strings.resources 是默認(rèn)版,英語版的可以是 Strings.en-US.resources(美國英文),簡體中文的可以是 Strings.zh-CHS.resources(簡體中文),而繁體中文的就可以是 Strings.zh-CHT.resources(繁體中文)。所謂的默認(rèn)版就是當(dāng)找不到適當(dāng)?shù)馁Y源版本時(shí)用的資源,一般都是英文。默認(rèn)文件應(yīng)當(dāng)被嵌入到主 Assembly 中,這樣就不會(huì)發(fā)生找不到資源的錯(cuò)誤。在 VS.NET 中將一個(gè)文件的屬性設(shè)為 Embedded Resource 可以使資源被嵌入到主 Assembly 中。

--------------------------------------------------------------------------------

資源文件類型
System.Resources 名字空間支持三種資源文件:
.txt 文件,只能有字符串資源。因?yàn)椴荒鼙磺度氲?Assembly 中,所以很容易暴露,被客戶修改。最大缺點(diǎn)是僅支持字符串資源,所以不推薦使用。
.resx 文件,由 XML 組成,可以加入任何資源,包括二進(jìn)制。同樣不能被嵌入到 Assembly 中。在 System.Resources 名字空間中有專用讀寫的類。VS.NET 創(chuàng)建這種文件然后將其轉(zhuǎn)成 .resources 文件并根據(jù)設(shè)置將其嵌入到 Assembly 中。
.resources 文件,PE 格式,可以加入任何資源。唯一可以被嵌入到 Assembly 的文件,在 System.Resources 名字空間中有專用讀寫的類。

--------------------------------------------------------------------------------

調(diào)用資源文件的幾種方法
ResourceManager 可以根據(jù)不同的 UICulture 設(shè)置返回不同的本地資源(這與 World-Ready 程序有關(guān),在此不討論),我們只需知道調(diào)用資源用到它就可以了。接下來讓我們看看如何調(diào)用每一種:
.txt 文件:
不可以直接調(diào)用,得先將其轉(zhuǎn)換成 .resources 文件才能使用。(關(guān)于如何轉(zhuǎn)換請看"推薦工具")
.resx 文件:
可以用 ResXResourceReader 來做讀取,但是這種方法不直觀,不推薦直接調(diào)用 .resx 文件。正確的方法是將其轉(zhuǎn)換成 .resources 文件,然后用 ResourceManager 作讀取工作。注意如果是在 VS.NET 中添加的 .resx 文件,那么它們自動(dòng)被設(shè)為 Embedded Resource,轉(zhuǎn)成 .resources 文件后被嵌入到 Assembly 中。
.resources 文件:
分成兩種情況:
被嵌入或編譯成 Satellite Assembly:
用 ResourceManager 的各種 constructor 來獲得在 Assembly 中的資源。
單獨(dú)文件,沒被編譯或嵌入到 Assembly 中:
可以用 ResourceManager.CreateFileBasedResourceManager 來獲得資源集(ResourceSet),就是所有的資源。
特殊情況:
還有一種特殊情況,那就是當(dāng)你直接嵌入一資源時(shí),也就是說,不通過一個(gè)資源文件而直接將一資源嵌入到 Assembly 中。這可以在 VS.NET 中通過設(shè)置一文件的 Build 屬性為 Embedded Resource 實(shí)現(xiàn)。在這種情況下 ResourceManager 就沒有用了,因?yàn)樗荒塬@取 .resources 資源文件(在或不在 Assembly 中)。那么如何調(diào)用這類的資源呢?不難,我們需要利用一些 Reflection 中的特征。別怕,不是讓你再學(xué) Reflection,其實(shí)我們只要了解一些 System.Reflection.Assembly 這個(gè)類中的一些函數(shù)就可以了。有三個(gè)相關(guān)函數(shù),不過我們只需要 Assembly.GetManifestResourceStream 這個(gè)函數(shù)。這個(gè)函數(shù)將一嵌入到 Assembly 中的資源以 stream 的方式返回,而我們可以將這個(gè) stream 轉(zhuǎn)成在 .NET 中可用的對象。比如,如果嵌入資源是一圖片,那么我們可以利用 New Bitmap(Stream) 這個(gè) Bitmap 的 constructor 獲得這個(gè)圖片資源的 Bitmap 對象。
注:在這里僅介紹怎樣獲得不同的資源的方法,關(guān)于怎樣用各個(gè)類與函數(shù)請參看有關(guān)文檔。

--------------------------------------------------------------------------------

如何準(zhǔn)確的定義資源文件的邏輯位置
我想這是許多人最關(guān)注的一段了!在這里作者將解說如何正確的填寫 ResouceManager(String, Assembly) 這個(gè) constructor,還有如何正確的填寫 Assembly.GetManifestResourceStream(String),因?yàn)樗鼈儍蓚(gè)的原理是相同的。看過了上面的描述,到了這里就簡單多了。這里主要討論的是怎么填寫那個(gè) String。這個(gè) String 就是資源的完整名,一個(gè)完整名由它的名字空間和文件名前部分(BaseName)組成。例如,如果默認(rèn)名字空間(root namespace)是 DefaultNamespace,資源文件的名字是 Strings.en-US.resources,那么它的完整名就是 DefaultNamespace.Strings。這個(gè)很簡單,不過怎樣確定名字空間呢?這就有些奇怪了,因?yàn)?C# 的編譯器與 VB.NET 的編譯器有些不同。作者在這里分別給出兩個(gè)編譯器怎樣給嵌入資源自動(dòng)添加命名空間:
C#
它自動(dòng)添加 default namespace(與 root namespace 相同),但也添加子文件夾的名字。例如,在 Subfolder 子文件夾下放的資源文件 Strings.en-US.resources,它的完整名是 default namespace + subfolder + base name = DefaultNamespace.Subfolder.Strings
VB.NET
在 VB.NET 中就很簡單了,它自動(dòng)給嵌入資源添加 root namespace。不管你在哪個(gè)子文件夾中放置資源文件,資源文件的完整名永遠(yuǎn)是 root namespace + base name。
根據(jù)上面的描述,如果我們使用 C#,用 VS.NET 在 NewFolder 這個(gè)子文件夾中添加了一個(gè)叫 Images.resources 的資源文件,那么我們應(yīng)該用以下代碼獲取這些資源,假設(shè) default namespace 是 MyDefault:
ResourceManager res = new ResourceManager("MyDefault.NewFolder.Images", this.GetType().Assembly);
但如果我們用 VB.NET 的話,就應(yīng)該這樣:
Dim res As New ResourceManager("MyDefault.Images", Me.GetType().Assembly)

--------------------------------------------------------------------------------

推薦工具
resgen.exe:SDK 中的工具,專門用來做資源文件類型之間的轉(zhuǎn)換。支持 .txt <-> .resx <-> .resources 之間的轉(zhuǎn)換。
Resourcer:專門用來創(chuàng)建資源文件,簡單易用,支持 .resx 與 .resources 文件格式。(http://www.aisto.com/roeder/dotnet)
.NET Reflector:用來瀏覽 Assembly。如果你不確定一個(gè)資源文件的完整名時(shí)可以用這個(gè)工具在 Assembly 中查看。(http://www.aisto.com/roeder/dotnet)

--------------------------------------------------------------------------------

總結(jié)
本文中談及了以下內(nèi)容:
什么是資源
什么是資源文件
.NET 中有哪幾類資源文件
如何定義資源文件的邏輯位置
調(diào)用資源文件的幾種方法
本文通過正確定位資源文件而解決了那個(gè)非常時(shí)髦的 MissingManifestResourceException。本文給了您一個(gè)很豐富資源調(diào)用經(jīng)驗(yàn)。想讓您完全了解有關(guān)資源文件的任何可能問題,當(dāng)然也會(huì)有漏洞。如果有的話希望大家諒解!

--------------------------------------------------------------------------------

參考信息
以下是一些文檔的鏈接,如果您的幫助是中文的話請?jiān)?MSDNVS 后添加".2052":
Resource File Generator (Resgen.exe)
ms-help://MS.VSCC/MS.MSDNVS/cptools/html/cpgrfresourcefilegeneratorutilityresgenexe.htm
Resources in Applications
ms-help://MS.VSCC/MS.MSDNVS/cpguide/html/cpconcreatingusingresources.htm
Resource Fallback Process
ms-help://MS.VSCC/MS.MSDNVS/cpguide/html/cpconpackagingdeployingresources.htm #cpconpackagingdeployingresourcesanchor1

--------------------------------------------------------------------------------

關(guān)于作者
作者:袁偉(Kefroth)



主站蜘蛛池模板: 亚洲天堂视频在线观看免费 | 日本高清影院 | 中日韩视频在线看免费观看 | 四虎影视在永久在线观看 2019 | 亚洲三级影视 | 午夜一级精品免费毛片 | 亚洲高清毛片 | 天天射天天干天天插 | 欧洲激情视频 | 中国黄色毛片 | 四虎影院免费观看视频 | 亚洲天堂免费 | 亚洲精品在线播放视频 | 日本视频a| 欧美视频在线观看xxxx | 亚洲第一区二区快射影院 | 亚洲综合色丁香婷婷六月图片 | 色香蕉色香蕉在线视频 | 色综合久久精品中文字幕 | 中国性欧美 | 天天干天天碰 | 日韩手机在线 | 午夜理理伦a级在线观看 | 色综合久久中文综合网 | 青青国产成人久久91网站站 | 色综合久久中文 | 青草影视 | 色香色香欲天天天影视综合网 | 亚洲国产成人久久精品hezyo | 青青草97国产精品免费观看 | 日本系列第一页 | 新版bt天堂资源在线 | 亚洲欧洲精品国产二码 | 日本成人精品 | 午夜国产精品免费观看 | 欧美综合亚洲 | 青草视频在线观看免费 | 青青草原在线免费 | 亚洲综合中文网 | 亚洲午夜久久影院 | 青娱乐国产在线观看 |