專利名稱:在公共語言運(yùn)行時(shí)語言中的資源地址支持的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及提供給軟件開發(fā)人員的編程工具,尤其涉及用于對資源,特別是符合公共語言規(guī)范的資源進(jìn)行尋址的編程工具。
(2)背景技術(shù)在受控代碼執(zhí)行環(huán)境內(nèi)的編程在現(xiàn)有技術(shù)中是已知的。該種環(huán)境的一個(gè)已知例子是包括公共語言運(yùn)行時(shí)(CLR)的環(huán)境。編譯器和工具向開發(fā)人員展露運(yùn)行時(shí)功能性,并使開發(fā)人員能夠編寫受益于受控代碼執(zhí)行的代碼。用以運(yùn)行時(shí)為目標(biāo)的語言編譯器開發(fā)的代碼被稱作受控代碼。受控代碼受益于諸如跨語言集成、跨語言例外處理、增強(qiáng)的安全性、版本和部署支持、組件交互的簡化模型、和調(diào)試與描述(profiling)業(yè)務(wù)的特點(diǎn)。
都已理解的理論是,不管其它對象是用什么語言實(shí)現(xiàn)的,為了要與其它對象充分地交互,,則對象應(yīng)當(dāng)將那些即將與它們進(jìn)行互操作的語言所公有的特征展露給調(diào)用程序。以這種理論為出發(fā)點(diǎn),已經(jīng)定義出了公共語言規(guī)范(CLS),這是一組在多應(yīng)用程序間共用的基本語言特征。以CLR為目標(biāo)的語言通常同意支持CLS特征和遵循指向編譯器的CLS規(guī)則。用于以CLR為目標(biāo)的語言的編譯器通過使得CLS數(shù)據(jù)類型和特征能夠被用來創(chuàng)建組件而簡化了CLS順從性。如果一個(gè)組件在暴露給其它代碼(包括導(dǎo)出類)的API中只使用CLS特征,那么基本上可以保證任何支持CLS的編程語言都可以訪問該組件。遵守CLS規(guī)則并且僅使用包括在CLS內(nèi)的特征的組件被稱作CLS順從組件。
一般來說,目前的開發(fā)環(huán)境在設(shè)計(jì)時(shí)僅提供了對管理資源的粗略級支持,尤其是對于CLS順從資源。為了將資源插入代碼中,開發(fā)人員通常需要硬編碼一個(gè)參考標(biāo)識符(例如,從存儲器中)。可選地,開發(fā)人員從參考文件中復(fù)制一個(gè)參考標(biāo)識符(例如,要求開發(fā)人員在編碼程序和參考文件之間來回切換)。
資源的參考標(biāo)識符通常包括鍵名和字符串。鑒于資源管理的目前的支持級別,存在著開發(fā)人員不能正確地鍵入鍵名和字符串的顯著危險(xiǎn)。雖然查閱參考文件來獲得鍵名或字符串的過程理論上能夠減少差錯(cuò),但是要額外付出努力卻不勝其煩,從而可論證地給開發(fā)人員提供了猜測正確值的動(dòng)機(jī)。當(dāng)然,猜測的過程容易出現(xiàn)錯(cuò)誤。
普遍的情況是,發(fā)源于不精確尋址的資源的程序缺陷不會產(chǎn)生建立時(shí)(build-time)差錯(cuò),且通常只是在運(yùn)行時(shí)才暴露出來。這就意味著在產(chǎn)品處于測試時(shí),通常必須命中實(shí)際上行使不正確尋址資源的代碼路徑。在沒有代碼侵入措施的情況下,識別所有的尋址錯(cuò)誤是很困難的。而且,在這種測試環(huán)境下進(jìn)行尋址糾正時(shí),通常要求應(yīng)用程序的測試人員正確地解釋尋址錯(cuò)誤,這并不總是一個(gè)容易而直接的任務(wù)。
(3)發(fā)明內(nèi)容本發(fā)明實(shí)施例涉及用來在受控代碼執(zhí)行環(huán)境的情況下,在運(yùn)行時(shí)之前減少編碼錯(cuò)誤的計(jì)算機(jī)實(shí)施方法。該方法包括提供給開發(fā)人員到多個(gè)受控代碼資源的訪問接入。該方法還包括驗(yàn)證由開發(fā)人員輸入的資源標(biāo)識符是對應(yīng)于所述多個(gè)受控代碼資源中的其中一個(gè)。
(4)
圖1是可以實(shí)施本發(fā)明的一個(gè)計(jì)算環(huán)境的框圖。
圖2是顯示代碼開發(fā)環(huán)境的示意框圖。
圖3是示例性屏幕抓圖。
圖4是示例性屏幕抓圖。
圖5是與直接訪問有關(guān)CLS順從資源的信息相關(guān)聯(lián)的步驟的流程圖。
(5)具體實(shí)施方式
圖1顯示了在其中可以實(shí)施本發(fā)明的合適計(jì)算系統(tǒng)環(huán)境100的例子。計(jì)算系統(tǒng)環(huán)境100僅僅作為合適計(jì)算環(huán)境的例子,目的不在于暗示有關(guān)本發(fā)明用途或功能的任何限制。計(jì)算環(huán)境100不應(yīng)該解釋為對與在典型操作環(huán)境100中所示的任何一個(gè)組件或其組合有依賴性或需求性。
本發(fā)明可以在多種其它通用或?qū)S糜?jì)算系統(tǒng)環(huán)境或配置中運(yùn)行。適用于本發(fā)明的熟知計(jì)算系統(tǒng)、環(huán)境和/或配置的例子包括,但不局限于,個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持或膝上設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機(jī)頂盒、可編程消費(fèi)電子、網(wǎng)絡(luò)PC、迷你計(jì)算機(jī)、巨型計(jì)算機(jī)、電話系統(tǒng)、包括上述系統(tǒng)或設(shè)備的任意組合的分布式計(jì)算環(huán)境、等等。
本發(fā)明可以用由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的通用上下文來描述,例如程序模塊。一般,程序模塊包括線程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)、等等,它們執(zhí)行特定的任務(wù)或?qū)嵤┨囟ǔ橄髷?shù)據(jù)類型。本發(fā)明還可以在分布式計(jì)算環(huán)境中實(shí)施,在這種環(huán)境中,任務(wù)由通過通信網(wǎng)絡(luò)連接的遠(yuǎn)程處理執(zhí)行。在分布計(jì)算環(huán)境中,程序模塊可以處在包括存儲設(shè)備在內(nèi)的本地及遠(yuǎn)程計(jì)算機(jī)存儲介質(zhì)中。
參考圖1,實(shí)施本發(fā)明的典型系統(tǒng)包括計(jì)算機(jī)110形式的通用計(jì)算設(shè)備。計(jì)算機(jī)110的組件可以包括中央處理單元120、系統(tǒng)存儲器130、和把包括該系統(tǒng)存儲器在內(nèi)的各種系統(tǒng)組件連接到處理單元120的系統(tǒng)總線121,但不限于此。
系統(tǒng)總線121可以是幾種類型總線結(jié)構(gòu)中的任意一種,包括存儲器總線或存儲器控制器、外設(shè)總線、和使用多種總線體系結(jié)構(gòu)的任意一種的本地總線。作為例子,而非限制,此類體系結(jié)構(gòu)包括工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)(ISA)總線、微通道體系結(jié)構(gòu)(MCA)總線、增強(qiáng)ISA(EISA)總線、視頻電子標(biāo)準(zhǔn)協(xié)會(VESA)本地總線、和也稱之為Mezzanine總線的外設(shè)組件互聯(lián)(PCI)。
計(jì)算機(jī)110通常包括多種計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)110可以訪問的任何可用介質(zhì),并包括易失和非易失性介質(zhì)、可移動(dòng)和不可移動(dòng)介質(zhì)。作為例子,但不是限制,計(jì)算機(jī)可讀介質(zhì)可以包括計(jì)算機(jī)存儲介質(zhì)和通信介質(zhì)。計(jì)算機(jī)存儲介質(zhì)包括易失和非易失、可移動(dòng)和不可移動(dòng)介質(zhì),這些介質(zhì)以存儲諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)指令、程序模塊或其它數(shù)據(jù)的信息的任何方法或技術(shù)來實(shí)施。計(jì)算機(jī)存儲介質(zhì)包括,但不限于,RAM、ROM、EEPROM、閃存或其它存儲技術(shù)、CD-ROM、數(shù)字多用盤(DVD)或其它光盤存儲器、磁盒、磁帶、磁盤存儲器或其它磁性存儲設(shè)備、或任何其它可以用來存儲所需信息并可以由計(jì)算機(jī)110訪問的介質(zhì)。作為例子,非限制,通信介質(zhì)包括諸如有線網(wǎng)絡(luò)或直接有線連接的有線介質(zhì)、和諸如聲波、RF、紅外線和其它無線介質(zhì)的無線介質(zhì)、上述任意介質(zhì)的組合也應(yīng)該包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。
系統(tǒng)存儲器130包括諸如只讀存儲器(ROM)131和隨機(jī)存取存儲器(RAM)132形式的易失和/或非易失存儲器。包含有助于例如在啟動(dòng)期間在計(jì)算機(jī)110內(nèi)的單元之間傳遞信息的基本線程的基本輸入/輸出系統(tǒng)(BIOS)133通常存儲在ROM 131中。RAM 132通常包括可立即被處理單元120訪問的和/或當(dāng)前正在操作于其上的數(shù)據(jù)和/或程序模塊。作為例子,而非限制,圖1顯示有操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136、和程序數(shù)據(jù)137。
計(jì)算機(jī)110還可以包括其它可移動(dòng)/不可移動(dòng)易失/非易失計(jì)算機(jī)存儲介質(zhì)。僅僅作為例子,圖1顯示了從不可移動(dòng)、非易失磁介質(zhì)讀寫的硬盤驅(qū)動(dòng)器141,從可移動(dòng)、非易失磁盤152讀寫磁盤驅(qū)動(dòng)器151,和從諸如CD-ROM或其它光介質(zhì)的可移動(dòng)、非易失光盤156讀寫的光盤驅(qū)動(dòng)器155。其它可以用于示例性操作環(huán)境中的可移動(dòng)/不可移動(dòng)、易失/非易失計(jì)算機(jī)存儲介質(zhì)包括但不限于磁帶盒、閃存卡、數(shù)字多用盤、數(shù)字視頻帶、固態(tài)RAM、固態(tài)ROM、等等。硬盤驅(qū)動(dòng)器141通常通過例如接口140的不可移動(dòng)存儲器接口連接到系統(tǒng)總線121,而磁盤驅(qū)動(dòng)器151和光盤驅(qū)動(dòng)器155通常通過例如接口150的可移動(dòng)存儲器接口連接到系統(tǒng)總線121。
上面所討論并在圖1中顯示的驅(qū)動(dòng)器及其相關(guān)計(jì)算機(jī)存儲器介質(zhì)為計(jì)算機(jī)110提供了計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的存儲器。在圖1中,例如,硬盤驅(qū)動(dòng)器141用于存儲操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146、和程序數(shù)據(jù)147。注意,這些組件既可以與操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136、和程序數(shù)據(jù)137相同也可以不同。操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136、和程序數(shù)據(jù)137在此被賦予不同的標(biāo)號,至少顯示它們是不同的拷貝。
用戶可以通過例如鍵盤162、麥克風(fēng)163、和諸如鼠標(biāo)、跟蹤球或觸摸板的定位設(shè)備161等輸入設(shè)備輸入命令和信息到計(jì)算機(jī)110中。其它輸入設(shè)備(未示出)可以包括游戲桿、游戲板、衛(wèi)星盤、掃描儀、等。這些和其它輸入設(shè)備通常是通過連接于系統(tǒng)總線的用戶輸入接口160連接到處理單元120的,但是也可以通過其它接口和總線結(jié)構(gòu)來連接,例如并行端口、游戲端口或通用串行總線(USB)。監(jiān)視器191或其它類型的顯示設(shè)備也通過例如視頻接口190的接口連接到系統(tǒng)總線121。除了監(jiān)視器之外,計(jì)算機(jī)還可以包括例如揚(yáng)聲器197和打印機(jī)196的其它外圍輸入設(shè)備,它們可以通過輸出外設(shè)接口190來連接。
計(jì)算110可以工作在使用到一個(gè)或多個(gè)例如遠(yuǎn)程計(jì)算機(jī)180的遠(yuǎn)程計(jì)算機(jī)的邏輯連接的組網(wǎng)環(huán)境中。遠(yuǎn)程計(jì)算機(jī)180可以是個(gè)人計(jì)算機(jī)、手持設(shè)備、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等設(shè)備或其它公用網(wǎng)絡(luò)節(jié)點(diǎn),并通常包括與計(jì)算機(jī)110相關(guān)描述于上的許多個(gè)或所有元件。圖1所描述的邏輯連接包括局域網(wǎng)(LAN)171和廣域網(wǎng)(WAN)173,但還可以包括其它網(wǎng)絡(luò)。這種組網(wǎng)環(huán)境在辦公室、企業(yè)范圍內(nèi)的計(jì)算機(jī)網(wǎng)絡(luò)、企業(yè)內(nèi)部網(wǎng)和因特網(wǎng)中是很普遍的。
當(dāng)用于LAN組網(wǎng)環(huán)境時(shí),計(jì)算機(jī)110被通過網(wǎng)絡(luò)接口或適配器170連接到LAN 171。當(dāng)用于WAN組網(wǎng)環(huán)境時(shí),計(jì)算機(jī)110通常包括用來在WAN 173(例如,因特網(wǎng))上建立通信的調(diào)制解調(diào)器172或其它裝置。調(diào)制解調(diào)器172,可以是內(nèi)置的也可以是外置的,可以通過用戶輸入接口160或其它合適機(jī)制連接到系統(tǒng)總線121。在組網(wǎng)環(huán)境中,與計(jì)算機(jī)110相關(guān)描述的程序模塊或其部分可存儲在遠(yuǎn)程存儲器存儲設(shè)備中。作為例子,而非限制,圖1顯示有駐留于遠(yuǎn)程計(jì)算機(jī)180上的遠(yuǎn)程應(yīng)用程序185。應(yīng)該理解,所示網(wǎng)絡(luò)連接是示例性的,并可以使用在計(jì)算機(jī)之間建立通信鏈路的其它手段。
圖2是顯示根據(jù)本發(fā)明一個(gè)方面的代碼開發(fā)環(huán)境201的示意框圖。該環(huán)境包括設(shè)計(jì)程序202和受控代碼基礎(chǔ)結(jié)構(gòu)204?;A(chǔ)結(jié)構(gòu)204示例被圖示為—盡管并不必須是—一種包括但不限于由美國Washington州Redmond市的微軟公司提供的現(xiàn)有.NET框架的環(huán)境的受控代碼執(zhí)行環(huán)境。
設(shè)計(jì)程序202是一種開發(fā)工具,尤其是與受控代碼基礎(chǔ)結(jié)構(gòu)204聯(lián)合運(yùn)作以提供用于設(shè)計(jì)、構(gòu)建、測試和部署應(yīng)用程序的工具的編程環(huán)境。例證性的設(shè)計(jì)程序202為在由微軟公司提供的VISUAL STUOIO.NET系列產(chǎn)品中的程序,盡管不是必須的。受控代碼基礎(chǔ)結(jié)構(gòu)204示例性地包括配置成支持跨語言順從代碼的受控代碼執(zhí)行環(huán)境。根據(jù)一個(gè)實(shí)施例,基礎(chǔ)結(jié)構(gòu)204包括微軟公司的.NET基礎(chǔ)結(jié)構(gòu)的公用語言運(yùn)行時(shí)組件,其中,在這種情況下,設(shè)計(jì)程序202被配置成與受控代碼基礎(chǔ)結(jié)構(gòu)204協(xié)作來產(chǎn)生至少部分地CLS順從的代碼。
根據(jù)本發(fā)明的一個(gè)方面,受控代碼基礎(chǔ)結(jié)構(gòu)204和設(shè)計(jì)程序202一起提供了管理由受控代碼基礎(chǔ)結(jié)構(gòu)204支持的語言的資源信息207的資源管理器。根據(jù)一個(gè)實(shí)施例,資源信息207包括與CLS順從資源有關(guān)的信息。在圖2內(nèi),資源管理器208和信息207顯示為虛線框,其分離于程序202和基礎(chǔ)結(jié)構(gòu)204。這種布置目的在于反映這樣的事實(shí),即,精確實(shí)現(xiàn)對于本發(fā)明來說并不是關(guān)鍵。資源管理器和信息可以作為基礎(chǔ)結(jié)構(gòu)204的部分、作為程序202的部分、作為度量組件或其它形式來實(shí)現(xiàn)。
資源請求被通過多種已知的可接受方法的任何一種而傳輸?shù)劫Y源管理器208。根據(jù)一個(gè)實(shí)施例,資源示例性地通過“GetString(string KeyName)”方法來請求。例如,在設(shè)計(jì)時(shí),開發(fā)人員與程序202接口,并創(chuàng)建包括對資源管理器208進(jìn)行調(diào)用的代碼,例如對作為資源信息207的部分而維持的CLS順從組件的調(diào)用。所編碼的資源調(diào)用示例性地包括與所需資源相關(guān)的字符串和鍵名的指示?;谒幋a的資源調(diào)用,在過程的某一刻,使用“GetString(stringKeyName)”調(diào)用向資源管理器208做出相應(yīng)字符串資源的請求。如果在設(shè)計(jì)時(shí)沒能正確地輸入字符串和/或鍵名(例如,在KeyName中的打字錯(cuò)誤),那么直到運(yùn)行時(shí)才能發(fā)現(xiàn)該錯(cuò)誤的并不鮮見。另外,可以使用除了上述GetString方法之外的方法,而不會脫離本發(fā)明的范圍。
根據(jù)本發(fā)明的一個(gè)方面,設(shè)計(jì)程序202包括總體上配置成用來在運(yùn)行時(shí)之前減少或消除資源尋址錯(cuò)誤的StringRes工具206。StringRes工具206被示例為補(bǔ)充設(shè)計(jì)程序202以便有助于更好地管理字符串資源的定制工具。根據(jù)一個(gè)實(shí)施例,StringRes工具206被作為設(shè)計(jì)程序202的一個(gè)組成部分。根據(jù)另一實(shí)施例,StringRes工具206是可以被集成在或安裝到程序202中的升級。
根據(jù)一個(gè)實(shí)施例,假設(shè)設(shè)計(jì)程序202包括StringRes工具206,該工具自動(dòng)與由開發(fā)人員使用設(shè)計(jì)程序202啟動(dòng)的任何編碼項(xiàng)目相關(guān)聯(lián)。然而,根據(jù)另一個(gè)實(shí)施例,只有當(dāng)該工具被打開或在特定項(xiàng)目的上下文環(huán)境中安裝時(shí)(即,該工具是有選擇性地在項(xiàng)目基礎(chǔ)上一一激活的),才能向開發(fā)人員提供工具206的功能性。
圖3是屏幕視圖300,表示的是設(shè)計(jì)程序202的界面的可能外觀的一個(gè)例子。開發(fā)人員示例性地將代碼輸入到編碼區(qū)域302。在平面視圖300的具體上下文中,如由高亮標(biāo)簽304所指示的那樣,開發(fā)人員正在協(xié)同指定為“Formal.cs”的文件創(chuàng)作代碼。
提供有文件選擇區(qū)域305以便開發(fā)人員能夠在不同文件和不同項(xiàng)目之間移動(dòng)。提供配置區(qū)域306以便開發(fā)人員能夠至少有選擇性地激活或去激活諸如StringRes工具206的各種編程工具。在屏幕視圖300的具體上下文中,如在區(qū)域306內(nèi)所指示的那樣,StringRes工具已經(jīng)協(xié)同“FROM1.RESX”文件激活。從而,當(dāng)他或她在FROM1.RESX文件的上下文中輸入代碼時(shí),向開發(fā)人員提供StringRes工具的功能性。根據(jù)一個(gè)實(shí)施例,該功能性還可以被擴(kuò)展到具備與Form1.resx文件的預(yù)定層次關(guān)系的文件。因此,根據(jù)本發(fā)明的一個(gè)方面,StringRes工具是被實(shí)現(xiàn)為在需要時(shí)才激活的定制編程工具。為了描述本發(fā)明,將假設(shè)StringRes工具206還為“FROM1.CS”文件激活,其是在編碼區(qū)域302中打開的文件。
以此存于腦海,根據(jù)本發(fā)明的一個(gè)方面,與StringRes工具相關(guān)聯(lián)的子系統(tǒng)(例如,項(xiàng)目管理子系統(tǒng))能夠根據(jù)正在從事的項(xiàng)目所使用的特定CLR順從語言進(jìn)行響應(yīng)。當(dāng)有新文件添加到項(xiàng)目中,或現(xiàn)有的文件被修改時(shí)(例如,通過觸及CustomTool屬性),該文件的父文件被檢查。父文件確定該項(xiàng)目是C#、C++、VB等等?;谠摯_定,代碼以該項(xiàng)目的適當(dāng)語言進(jìn)行發(fā)布。以這種方式,一個(gè)設(shè)計(jì)程序方案可以包含多個(gè)項(xiàng)目,且StringRes工具可以容納。
根據(jù)本發(fā)明一個(gè)方面,StringRes工具206提供給開發(fā)人員方便的設(shè)計(jì)時(shí)對資源地址/索引信息、以及可任選地對應(yīng)于該目錄資源的值的可用性。根據(jù)一個(gè)實(shí)施例,以顯示在有助于開發(fā)人員完成語句和函數(shù)的彈出窗口和/或下拉列表中(例如,直接顯示于設(shè)計(jì)程序界面內(nèi))的信息的形式提供對資源的訪問。例如,對應(yīng)于可用資源的標(biāo)識符信息(即,鍵名、字符串和/或值信息)顯示給開發(fā)人員以完成選擇和語句。
根據(jù)一個(gè)實(shí)施例,有效資源信息是為特定資源參考而顯示的。例如,在輸入資源對象、命令或函數(shù)之后,激活器鍵啟動(dòng)對當(dāng)前命令或函數(shù)有效值的下拉列表的顯示。根據(jù)一個(gè)實(shí)施例,激活器鍵是一個(gè)句號(.)。根據(jù)其它實(shí)施例,激活器鍵是空格鍵、左(開)括號鍵、或一些其它鍵調(diào)用。根據(jù)一個(gè)實(shí)施例,通過下拉列表導(dǎo)航(即,滾動(dòng))或鍵輸入,并在其中一個(gè)可用選擇上停止(例如,預(yù)定的時(shí)量)鍵,能夠在靠近下拉菜單彈出的窗口中顯示附加的信息。
根據(jù)一個(gè)實(shí)施例,在設(shè)計(jì)程序界面上提供給開發(fā)人員能夠使得他或她調(diào)整資源信息自動(dòng)傳送狀態(tài)為自動(dòng)、手動(dòng)或無效的選項(xiàng)。當(dāng)設(shè)定為自動(dòng)時(shí),在按壓激活器鍵時(shí),資源列表自動(dòng)顯示。當(dāng)設(shè)置為手動(dòng)時(shí),在光標(biāo)位于與信息的可用性相關(guān)聯(lián)的位置時(shí),開發(fā)人員可以選擇性地激活資源信息的顯示(例如,使用編輯菜單命令、快捷菜單選擇、或CTRL-鍵組合)。根據(jù)一個(gè)實(shí)施例,與CLS順從資源特別相關(guān)的信息通過作為StringRes工具206組件提供的所述設(shè)計(jì)程序界面更新來使得對于開發(fā)人員可用。
一般而言,StringRes工具206能夠?yàn)橘Y源標(biāo)識符和相應(yīng)信息的選擇建立有效交叉參考,尤其是對于與CLS順從資源相關(guān)的標(biāo)識符和信息。因此,根據(jù)本發(fā)明的一個(gè)方面,當(dāng)開發(fā)人員輸入資源類并隨后使用激活鍵時(shí),就自動(dòng)提供列表(例如,下拉菜單)來顯示相關(guān)的可訪問方法和屬性。根據(jù)一個(gè)實(shí)施例,自動(dòng)產(chǎn)生的列表是可用字符串鍵名的集合。根據(jù)另一個(gè)實(shí)施例,點(diǎn)亮其中一個(gè)鍵名則啟動(dòng)相關(guān)字符串值(例如,在彈出框內(nèi))的提供。
圖4是表示設(shè)計(jì)程序202界面另一個(gè)例子的平面視圖400。圖4中的抓圖基本上類似于圖3的抓圖,并且對于StringRes工具206被激活的假設(shè)仍然有效。在位置425處的編碼區(qū)域內(nèi),開發(fā)人員已經(jīng)鍵入“FROM11”,其示例為輸入資源標(biāo)識符的先趨符。在該先趨符之后,開發(fā)人員鍵入了句號(.),其示例為一個(gè)激活器鍵,該鍵以下拉菜單430的形式啟動(dòng)來自StringRes工具206的響應(yīng)。菜單430示例性地包含對于相應(yīng)先趨符輸入條目有效的資源信息。
根據(jù)一個(gè)實(shí)施例,在下拉框中的信息以分層方式排列。例如,資源可以示例為基于多種語言可用,每種語言對應(yīng)于作為與更寬資源單元相關(guān)的分層單元顯示于該框中。當(dāng)然,可以基于語言以外的其它任何因素來進(jìn)行組織。應(yīng)該注意,菜單430可以配置成包含多于所示的六種選擇(例如,按字母順序或其它排列可滾動(dòng)的列表)。在菜單430中的所列的單元可以是—但不必是—對應(yīng)于諸如CLS順從單元的單元。
繼續(xù)該例子,然后,開發(fā)人員通過菜單430進(jìn)行導(dǎo)航并停在“MICHELLELOC”條目上。暫停于該條目之上示例性地啟動(dòng)相應(yīng)彈出框436的出現(xiàn),該框包含與從菜單430中選擇的單元相關(guān)的字符串和/或值信息。最后,開發(fā)人員從菜單430選擇其中一個(gè)條目。選擇將使得資源鍵名、字符和/或值被自動(dòng)插入到代碼的合適位置中。
圖5是顯示與本發(fā)明實(shí)施例相關(guān)聯(lián)的步驟的流程圖。根據(jù)塊502,向開發(fā)人員提供到CLS順從資源的訪問。根據(jù)步驟504,在代碼開發(fā)期間,呈現(xiàn)給開發(fā)人員各自表示CLS順從資源的資源標(biāo)識符的集合。如步驟506所指示的那樣,開發(fā)人員接著從該集合中選擇表示所需CLS順從資源的標(biāo)識符。最后,根據(jù)步驟508,將相應(yīng)的精確信息包括到開發(fā)人員的項(xiàng)目中。
根據(jù)本發(fā)明的另一方面,StringRes工具206提供對于構(gòu)建時(shí)檢查的支持來確定資源,尤其是CLS順從資源是否因差錯(cuò)而尋址。該檢查是通過比較在代碼內(nèi)的資源標(biāo)識符和有效值的集合(例如,被維護(hù)以便支持所描述的設(shè)計(jì)時(shí)資源信息的提供的資源值的相同集合)來進(jìn)行的。如果存在不匹配所存儲值的資源值,就示例性地向開發(fā)人員報(bào)告錯(cuò)誤以進(jìn)行糾正。根據(jù)一個(gè)實(shí)施例,該系統(tǒng)配置成使得開發(fā)人員能夠在需要時(shí)添加信息到有效值列表中,以配置該系統(tǒng)使其接受新的或不同資源輸入。
根據(jù)一個(gè)實(shí)施例,參考圖3的屏幕抓圖,為了將資源工具擴(kuò)展到新的資源信息,開發(fā)人員選擇(例如,右擊)在區(qū)域305方案瀏覽器內(nèi)的項(xiàng)目。然后,開發(fā)人員可以啟動(dòng)把具有擴(kuò)展名“.strings”的文件添加到項(xiàng)目文件。接著,根據(jù)需要添加新的字符串到.strings文件中。
根據(jù)一個(gè)更具體的實(shí)施例,為了添加新的資源信息,開發(fā)人員首先通過選擇(即,右擊)在方案區(qū)域305內(nèi)的一個(gè)項(xiàng)目來引出功能選項(xiàng)菜單。然后,開發(fā)人員選擇“添加新條目”功能以便產(chǎn)生對話框。接著,開發(fā)人員選擇“資源”類目和字符串資源工具子類目以便向該項(xiàng)目添加具有“.strings”擴(kuò)展名的文件。在方案瀏覽器中選擇“顯示所有文件”選項(xiàng)將示例性地展示該.strings文件具有兩個(gè)子項(xiàng)目一個(gè)“.cs”文件和一個(gè)“.resx”文件。示例性地,子文件不可以被直接編輯,因?yàn)樗鼈兪菑?strings文件生成的。這些文件并不是在構(gòu)建時(shí)生成,而是在每當(dāng)存在對于.strings文件的改變、或?qū)τ?strings文件的定制工具或定制工具名空間屬性的改變時(shí)才生成。
為了添加資源信息,開發(fā)人員只需將信息添加到.strings文件,例如,使用格式“<KeyName>=<value>”。該格式的一個(gè)例子是SimpleMsg=this is a simple message.
.strings文件的缺省文件名示例為STR1.strings,其在子文件“.cs”文件中產(chǎn)生以“STR1”命名的類(該類名來自文件名)。因此,例如,在C#編程環(huán)境中,下面的例子將是一個(gè)精確的例子STR1.SimpleMsg;//the string returned from this would be″Thisis a simple message.″使用字符串格式(string.format)的普通操作示例性地也由該工具來照顧。
例如FileNotFoundError(filename,description,int retries)=Thefile{0}was not found because{1}.The number of retry attemptswas{2}.
不指定給定參數(shù)類型示例性地將該類型缺省為System.String(系統(tǒng)字符串)。在C#編程環(huán)境中,可應(yīng)用的例子為STR1.FileNotFoundError(″myFile.abc″,″the file was deleted″,30);//This would printThe file myFileabc.was not foundbecausethe file was deleted.The number of retry attempts was 30.
在.strings文件中的注釋示例性地以井(pound)號(#)或分號(;)開頭。標(biāo)記為井號的注釋示例性地從外部是看不到的,而那些由分號標(biāo)記的通常是可用的。從外部看得到的注釋被輸出到.resx文件。示例性地,如果而且只有在該行中的第一字符是“#”或“;”時(shí),StringRes工具才識別為有效注釋行。
在.strings文件中的每個(gè)消息示例性地在自動(dòng)產(chǎn)生的類中產(chǎn)生兩個(gè)訪問器(accessor)。一個(gè)用于“不確定語言的”和另一用于“指定語言的”。對于簡單類型的消息,該訪問器是一個(gè)字段。為了添加語言作為參數(shù),要添加函數(shù),并且稍稍改變其名稱(例如,將“Loc”添加在字段名后)。對于采用參數(shù)的消息,名稱不變;且只有參數(shù)列表改變(即,添加一CultureInfo參數(shù))。對于自動(dòng)產(chǎn)生的.cs文件的隨意觀察將顯示細(xì)節(jié)。
添加到項(xiàng)目時(shí),.strings文件示例性地會使定制工具屬性設(shè)定為“StringRes”、定制工具名空間(Custom Tool Namespace)設(shè)定為空、構(gòu)建動(dòng)作(Build Action)設(shè)定為“none”(無)。用于StringRes的輸出的名空間是從項(xiàng)目中獲得的,但它可以示例性地通過將Custom Toll Namespace設(shè)定至所需的輸出名空間而被忽視。
設(shè)計(jì)程序識別StringRes工具作為定制工具(Custom Tool)的方式示例性地是通過在方案瀏覽器中具有客戶工具屬性設(shè)為StringRes的的文件而進(jìn)行的。因此,只要客戶工具屬性被設(shè)為StringRes并且文件處于有效格式中,那么添加.txt或.abc文件就好了(即,在C#項(xiàng)目中)。
在產(chǎn)品中部署了與文化無關(guān)的資源之后,示例性地,loc資源可以在任何時(shí)進(jìn)行部署,而無需對二元(binary)有任何觸及;并且不需要重新構(gòu)建。如果字符串資源被請求,而在運(yùn)行時(shí)不可用,那么就示例性地遍歷該資源的層次體系,并將該體系的根作為與文化無關(guān)的資源集。因此,如果請求了一個(gè)日語字符串,但是不可用,那么就返回英語字符串。如果后來日語資源集變得可用了,那么就返回日語字符串。
作為例子,考慮以下場景1)AppX使用嵌入在可執(zhí)行AppX中的字符串資源;2)六個(gè)星期之后,在奧地利突然產(chǎn)生了對AppX的興趣,奧地利-德語在System.Localization.CultureInfo類中為“de-At”;3)在AppX的可執(zhí)行目錄中,創(chuàng)建“de-At”的子目錄以及為標(biāo)準(zhǔn)德語創(chuàng)建的子目錄“de”;4)奧地利-德語的loc賣主遲到,但是標(biāo)準(zhǔn)德語中的局部化資源及時(shí)被接收到;5)局部化資源被放入“de”子目錄中,其中l(wèi)oc資源仍運(yùn)行,而AppX是熱放的(dropped hot)(例如,不必重新開始該業(yè)務(wù));
6)對于“de-At”字符串的請求被用“de”字符串返回;和7)在后面的某個(gè)日子,當(dāng)“de-At”資源被放下時(shí),就返回它們。
根據(jù)一個(gè)實(shí)施例,StringRes工具配置成管理多個(gè)字符串,其表示被以某種形式提供給用戶(例如,在下拉列表框內(nèi))。該工具提供了自動(dòng)完成功能,其中當(dāng)用戶選擇了StringRes正在管理的其中一個(gè)條目時(shí)(例如,從下拉框中選擇),該字符串的值就以某種形式提供給用戶(例如,在彈出框內(nèi))。
例如,考慮StringRes工具管理包括“mystring=this is my string”在內(nèi)的STR1.strings的情形。如果,在設(shè)計(jì)程序界面內(nèi),用戶在合適的位置鍵入STR1(例如,作為VisualStudio.net IDE),那么將顯示相應(yīng)選項(xiàng)的列表(例如,在下拉列表框內(nèi))。如果用戶從選項(xiàng)列表中選擇了myString,那么該工具將報(bào)告相應(yīng)的值(例如,“this is my string”)。根據(jù)一個(gè)實(shí)施例,該值被報(bào)告于氣球或彈出框內(nèi)。因此,用戶能夠在設(shè)計(jì)時(shí)獲得所尋址的字符串的**值**。
在此所描述的方法一般減少或消除了資源尋址的錯(cuò)誤,從而防止了將錯(cuò)誤引入到應(yīng)用程序中。在設(shè)計(jì)時(shí)提供資源的值,尤其是CLS順從資源的值,增強(qiáng)了代碼開發(fā)的生產(chǎn)率和精確性。
本說明書包括有關(guān)如何特別地添加字符串到.strings文件的解釋。根據(jù)本發(fā)明的一個(gè)方面,StringRes工具還可處理標(biāo)準(zhǔn)文件(例如,標(biāo)準(zhǔn).resx文件)。根據(jù)一個(gè)實(shí)施例,當(dāng)字符串定義被通過StringRes工具功能性而添加到可用的定義中時(shí),所需的只是名稱/值對(例如,“mystring=this is my string”)。
雖然本發(fā)明是參考特定實(shí)施例進(jìn)行了描述,但是本領(lǐng)域熟練人員將認(rèn)識到,在不脫離本發(fā)明精神和范圍的情況下,可以在形式和細(xì)節(jié)上做出變化。
權(quán)利要求
1.一種用來在受控代碼執(zhí)行環(huán)境的上下文中在運(yùn)行時(shí)之前減少編碼錯(cuò)誤的計(jì)算機(jī)實(shí)施方法,包括向開發(fā)人員提供對多個(gè)受控代碼資源的訪問;和驗(yàn)證由開發(fā)人員輸入的資源標(biāo)識符對應(yīng)于所述多個(gè)受控代碼資源中的其中一個(gè)。
2.根據(jù)權(quán)利要求1的方法,其中驗(yàn)證包括向所述開發(fā)人員提供資源標(biāo)識符的集合;和以從所述資源標(biāo)識符集合中選擇的形式接收由開發(fā)人員輸入的所述資源標(biāo)識符。
3.根據(jù)權(quán)利要求2的方法,其中提供資源標(biāo)識符集合包括提供對應(yīng)于由開發(fā)人員選擇的特定類的資源標(biāo)識符的集合。
4.根據(jù)權(quán)利要求2的方法,其中提供資源標(biāo)識符集合包括響應(yīng)于開發(fā)人員激活鍵的輸入而提供資源標(biāo)識符集合。
5.根據(jù)權(quán)利要求4的方法,其中響應(yīng)于激活鍵輸入而提供包括響應(yīng)于在輸入資源類之后的激活鍵的輸入而提供。
6.根據(jù)權(quán)利要求2的方法,其中提供資源標(biāo)識符的集合包括提供鍵名集合。
7.根據(jù)權(quán)利要求6的方法,進(jìn)一步包括向開發(fā)人員提供對應(yīng)于資源鍵名集合中所選的一個(gè)的資源值。
8.根據(jù)權(quán)利要求2的方法,進(jìn)一步包括向開發(fā)人員提供對應(yīng)于資源標(biāo)識符集合中所選一個(gè)的資源值。
9.根據(jù)權(quán)利要求8的方法,其中提供資源值包括在彈出框內(nèi)提供信息。
10.根據(jù)權(quán)利要求2的方法,其中提供所述資源標(biāo)識符的集合包括在下拉菜單內(nèi)提供信息。
11.根據(jù)權(quán)利要求1的方法,其中向開發(fā)人員提供對多個(gè)受控代碼資源的訪問包括向開發(fā)人員提供對符合公共語言規(guī)范的多個(gè)資源的訪問。
12.根據(jù)權(quán)利要求1的方法,進(jìn)一步包括從開發(fā)人員接收對于受控代碼資源的添加。
13.根據(jù)權(quán)利要求2的方法,其中提供資源標(biāo)識符集合包括響應(yīng)于開發(fā)人員的對應(yīng)于顯示資源信息的請求的輸入而提供資源標(biāo)識符集合。
14.根據(jù)權(quán)利要求2的方法,其中響應(yīng)于開發(fā)人員的對應(yīng)于顯示資源信息的請求的輸入而提供資源標(biāo)識符集合包括響應(yīng)于當(dāng)光標(biāo)位于與信息可用性相關(guān)的位置時(shí)由開發(fā)人員做出的輸入,提供資源標(biāo)識符集合。
15.根據(jù)權(quán)利要求2的方法,其中向開發(fā)人員提供資源標(biāo)識符集合包括向開發(fā)人員提供包括至少兩個(gè)標(biāo)識符的資源標(biāo)識符集合,其中每一個(gè)標(biāo)識本質(zhì)上相同資源的不同語言版本。
16.一種用來開發(fā)軟件應(yīng)用程序的系統(tǒng),包括受控代碼基礎(chǔ)結(jié)構(gòu),其提供受控代碼執(zhí)行環(huán)境;設(shè)計(jì)程序,其提供支持開發(fā)人員生成至少部分地以受控代碼執(zhí)行環(huán)境為目標(biāo)的代碼的代碼生成環(huán)境;字符串資源工具,其補(bǔ)充所述設(shè)計(jì)程序并使開發(fā)人員能夠驗(yàn)證資源標(biāo)識符被正確地尋址以便對應(yīng)于由受控代碼執(zhí)行環(huán)境所支持的受控代碼資源。
17.根據(jù)權(quán)利要求16的系統(tǒng),其中字符串資源工具進(jìn)一步被配置成使開發(fā)人員能夠驗(yàn)證資源標(biāo)識符被正確地尋址以便對應(yīng)于符合公共語言規(guī)范的資源。
18.根據(jù)權(quán)利要求17的系統(tǒng),其中字符串資源工具被配置成使得開發(fā)人員能夠驗(yàn)證通過下面步驟來驗(yàn)證資源標(biāo)識符被正確地尋址通過界面向所述設(shè)計(jì)程序提供資源標(biāo)識符集合;和以從資源標(biāo)識符集合中選擇的形式,接收由開發(fā)人員輸入的資源標(biāo)識符。
19.根據(jù)權(quán)利要求18的系統(tǒng),其中所述字符串資源工具進(jìn)一步配置成通過所述設(shè)計(jì)程序界面提供資源鍵名信息。
20.根據(jù)權(quán)利要求18的系統(tǒng),其中字符串資源工具進(jìn)一步配置成通過設(shè)計(jì)程序界面提供值信息。
21.一種用來在受控代碼執(zhí)行環(huán)境的上下文中在運(yùn)行時(shí)之前減少編碼錯(cuò)誤的字符串資源工具,包括工具組件,其通過設(shè)計(jì)程序界面提供字符串信息,其中所述字符串信息使得開發(fā)人員能夠從一可選對象的閉集中選擇一表示特定字符串的特定標(biāo)識符。
22.根據(jù)權(quán)利要求21的字符串資源工具,其中所述字符串信息使開發(fā)人員能夠從一可選對象的閉集中選擇一符合公共語言規(guī)范的表示特定字符串的特定標(biāo)識符。
23.根據(jù)權(quán)利要求21的字符串資源工具,其中所述可選對象的閉集對應(yīng)于由開發(fā)者選擇的特定類。
24.根據(jù)權(quán)利要求21的字符串資源工具,其中所述工具組件配置成響應(yīng)于開發(fā)人員的激活鍵輸入而提供字符串信息到所述設(shè)計(jì)程序界面。
25.根據(jù)權(quán)利要求21的字符串資源工具,其中所述工具組件進(jìn)一步配置成通過設(shè)計(jì)程序界面提供在所述可選對象閉集中表示的至少一個(gè)標(biāo)識符的值信息。
全文摘要
公開了一種用來在受控代碼執(zhí)行環(huán)境的情況中在運(yùn)行時(shí)之前減少編碼錯(cuò)誤的計(jì)算機(jī)實(shí)施的方法。該方法包括提供給開發(fā)人員到多個(gè)受控代碼資源的訪問。該方法還包括驗(yàn)證由開發(fā)人員輸入的資源標(biāo)識符對應(yīng)于所述多個(gè)受控代碼資源中的其中一個(gè)。
文檔編號G06F9/44GK1670715SQ200510059428
公開日2005年9月21日 申請日期2005年3月17日 優(yōu)先權(quán)日2004年3月17日
發(fā)明者J·M·科利, M·J·曼克努爾蒂, M·A·沃特金斯 申請人:微軟公司