(57)【要約】      （修正有）【課題】ランタイムをターゲットとする言語コンパイラで開発されるマネージコードの実行環境のコンテキストにおいて、実行時に先立ってコーディングエラーを低減する。【解決手段】マネージコード実行環境を提供するマネージコードインフラストラクチャと、マネージコード実行環境を少なくとも部分的にターゲットとするコードの生成の際に開発者をサポートするコード生成環境を提供する設計プログラムと、設計プログラムを補足し、マネージコード実行環境によってサポートされるマネージコードリソースに対応するようにリソース識別子が正しくアドレスされていることを開発者が検証できるようにする文字列リソースツールを備える。【選択図】図４
2005267644.tif 000002
【特許請求の範囲】
【請求項１】
マネージコード実行環境のコンテキストにおいて実行時に先立ってコーディングエラーを低減するためのコンピュータ実施される方法であって、
開発者に複数のマネージコードリソースへのアクセスを提供することと、
開発者によって入力されるリソース識別子が前記複数のマネージコードリソースの１つに対応することを検証することと
を備えることを特徴とする方法。
【請求項２】
検証することは、
開発者にリソース識別子のコレクションを提供することと、
リソース識別子の前記コレクションからの選択の形態で開発者から前記リソース識別子の入力を受けることと
を備えることを特徴とする請求項１に記載の方法。
【請求項３】
リソース識別子のコレクションを提供することは、開発者によって選択された特定のクラスに対応するリソース識別子のコレクションを提供することを備えることを特徴とする請求項２に記載の方法。
【請求項４】
リソース識別子のコレクションを提供することは、アクティベーションキーの開発者による入力に応答してリソース識別子のコレクションを提供することを備えることを特徴とする請求項２に記載の方法。
【請求項５】
アクティベーションキーの入力に応答して提供することは、リソースクラスの入力に続くアクティベーションキーの入力に応答して提供することを備えることを特徴とする請求項４に記載の方法。
【請求項６】
リソース識別子のコレクションを提供することは、キー名のコレクションを提供することを備えることを特徴とする請求項２に記載の方法。
【請求項７】
前記リソースキー名のコレクションの選択された１つに対応するリソース値を開発者に提供することをさらに備えることを特徴とする請求項６に記載の方法。
【請求項８】
前記リソース識別子のコレクションの選択された１つに対応するリソース値を開発者に提供することをさらに備えることを特徴とする請求項２に記載の方法。
【請求項９】
リソース値を提供することは、ポップアップボックス内に情報を提供することを備えることを特徴とする請求項８に記載の方法。
【請求項１０】
前記リソース識別子のコレクションを提供することは、ドロップダウンメニュー内に情報を提供することを備えることを特徴とする請求項２に記載の方法。
【請求項１１】
開発者に複数のマネージコードリソースへのアクセスを提供することは、開発者に共通言語仕様に準拠する複数のリソースへのアクセスを提供することを備えることを特徴とする請求項１に記載の方法。
【請求項１２】
前記複数のマネージコードリソースへの追加を開発者から受けることをさらに備えることを特徴とする請求項１に記載の方法。
【請求項１３】
リソース識別子のコレクションを提供することは、リソース情報の表示の要求に対応する開発者による入力に応答して、リソース識別子のコレクションを提供することを備えることを特徴とする請求項２に記載の方法。
【請求項１４】
リソース情報の表示の要求に対応する開発者による入力に応答して、リソース識別子のコレクションを提供することは、
情報アベイラビリティに関連付けられた位置にカーソルが位置決めされるときに行われる開発者による入力に応答して、リソース識別子のコレクションを提供することを備えることを特徴とする請求項２に記載の方法。
【請求項１５】
リソース識別子のコレクションを開発者に提供することは、それぞれが基本的に同じリソースである異なる言語のバージョンを識別する少なくとも２つの識別子を含むリソース識別子のコレクションを開発者に提供することを備えることを特徴とする請求項２に記載の方法。
【請求項１６】
ソフトウェアアプリケーションを開発するためのシステムであって、
マネージコード実行環境を提供するマネージコードインフラストラクチャと、
前記マネージコード実行環境を少なくとも部分的にターゲットとするコードの生成の際に開発者をサポートするコード生成環境を提供する設計プログラムと、
前記設計プログラムを補足し、前記マネージコード実行環境によってサポートされるマネージコードリソースに対応するようにリソース識別子が正しくアドレスされていることを開発者が検証できるようにする文字列リソースツールと
を備えたことを特徴とするシステム。
【請求項１７】
前記文字列リソースツールは、共通言語仕様に準拠するリソースに対応するようにリソース識別子が正しくアドレスされていることを開発者が検証できるようにさらに構成されたことを特徴とする請求項１６に記載のシステム。
【請求項１８】
前記文字列リソースツールは、
前記設計プログラムのインターフェースを介してリソース識別子のコレクションを提供することと、
前記リソース識別子のコレクションからの選択の形態で開発者からリソース識別子の入力を受けることと
によってリソース識別子が正しくアドレスされていることを開発者が検証できるように構成されたことを特徴とする請求項１７に記載のシステム。
【請求項１９】
前記文字列リソースツールは、前記設計プログラムインターフェースを介して、リソースのキー名情報を提供するようにさらに構成されたことを特徴とする請求項１８に記載のシステム。
【請求項２０】
前記文字列リソースツールは、前記設計プログラムインターフェースを介して、値の情報を提供するようにさらに構成されたことを特徴とする請求項１８に記載のシステム。
【請求項２１】
マネージコード実行環境のコンテキストにおいて実行時に先立ってコーディングエラーを低減するための文字列リソースツールであって、
設計プログラムインターフェースを介して文字列情報を提供するツールコンポーネントであって、前記文字列情報は開発者が特定の文字列を表す特定の識別子を選択肢の閉じた集合から選択できるようにするツールコンポーネントを備えたことを特徴とする文字列リソースツール。
【請求項２２】
前記文字列情報は、開発者が共通言語仕様に準拠する特定の文字列を表す特定の識別子を選択肢の閉じた集合から選択できるようにしたことを特徴とする請求項２１に記載の文字列リソースツール。
【請求項２３】
前記選択肢の閉じた集合は、開発者によって選択された特定のクラスに対応することを特徴とする請求項２１に記載の文字列リソースツール。
【請求項２４】
前記ツールコンポーネントは、前記設計プログラムインターフェースへの開発者によるアクティベーションキーの入力に応答して前記文字列情報を提供するように構成されたことを特徴とする請求項２１に記載の文字列リソースツール。
【請求項２５】
前記ツールコンポーネントは、前記選択肢の閉じた集合において表された少なくとも１つの識別子について、前記設計プログラムインターフェースを介して、値の情報を提供するようにさらに構成されたことを特徴とする請求項２１に記載の文字列リソースツール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、ソフトウェア開発者に提供されるプログラミングツールに関する。より詳細には、本発明は、リソース、特に共通言語仕様（Ｃｏｍｍｏｎ  Ｌａｎｇｕａｇｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ）に準拠するリソースをアドレスするためのプログラミングツールに関する。
【背景技術】
【０００２】
マネージコード実行環境内でのプログラミングは、技術的に知られている。このような環境の既知の一例は、共通言語ランタイム（ＣＬＲ：Ｃｏｍｍｏｎ  Ｌａｎｇｕａｇｅ  Ｒｕｎｔｉｍｅ）を含む環境である。コンパイラおよびツールは、ランタイムの機能を公開し、開発者がマネージコードの実行から恩恵を受けるコードを書けるようにする。ランタイムをターゲットとする言語コンパイラで開発されるコードは、マネージコードとして知られる。マネージコードは、クロス言語（ｃｒｏｓｓ−ｌａｎｇｕａｇｅ）インテグレーション、クロス言語例外処理、強化されたセキュリティ、バージョン管理および展開サポート、コンポーネントのインターラクションのための簡略化されたモデル、そしてデバッギングおよびプロファイリングサービスなどの機能から恩恵を受ける。
【０００３】
オブジェクトは、実装された言語に関わらず、他のオブジェクトと完全に対話するためには、相互運用（ｉｎｔｅｒ−ｏｐｅｒａｔｅ）されることになる諸言語に共通なオブジェクトの機能を呼出し側に公開すべきであることは、理解されているセオリーである。このセオリーを念頭において、複数のアプリケーションにわたって共通する基本的な言語の機能のセットである共通言語仕様（ＣＬＳ）が定義された。ＣＬＲをターゲットとする言語は、ＣＬＳ機能をサポートすることに一般的に同意し、コンパイラ向けのＣＬＳルールに従う。ＣＬＲをターゲットとする言語のためのコンパイラは、ＣＬＳのデータ型および機能を、コンポーネントを作成するために利用可能にすることによってＣＬＳ準拠を簡略化している。コンポーネントが、（派生したクラスを含めて）他のコードに公開するＣＬＳ機能のみをＡＰＩで使用する場合、このコンポーネントは、このＣＬＳをサポートするどのようなプログラミング言語からもアクセス可能であることが本質的に保証される。ＣＬＳルールを順守し、ＣＬＳに含まれている機能だけを使用するコンポーネントは、ＣＬＳ準拠コンポーネントと言われる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
一般的にいえば、現在の開発環境は、設計時に、リソース、特にＣＬＳ準拠のリソースを管理するための大雑把なレベルのサポートしか提供していない。リソースをコードに挿入するために、開発者は共通して、参照識別子を（たとえばメモリから）ハードコーディングする必要がある。あるいは、開発者は、参照識別子を参照ファイルからコピーする（たとえば、開発者がコーディング中のプログラムと参照ファイルの間で交互に切り替えを行う必要がある）。
【０００５】
リソースの参照識別子は、共通して、キー名および文字列を備える。リソース管理に対するサポートの現在のレベルを考えると、開発者がキー名や文字列を不正確に入力するという顕著なリスクがある。キー名または文字列を得るために参照ファイルを調べるプロセスは、理論的にはエラーを低減することになるが、この追加の努力は単調なものであり、それゆえ、開発者にとって正しい値を推測しようとする何らかのインセンティブを与えていることはおそらく間違いのないことである。もちろん、推測のプロセスは誤りを生じやすい。
【０００６】
不正確にアドレスされたリソースに由来するバグは、構築時のエラーを生じず、通常は実行時にだけ発見可能である。これは、製品のテスト中に不正確にアドレスされたリソースを実際に機能させるコードパスが概ねヒットされなければならないことを意味する。すべてのアドレスエラーを認識することは、コード侵入的な手段なくしては困難である可能性がある。また、こうしたテスト環境のもとでのアドレス訂正では、アプリケーションのテスタは、通常、アドレスエラーを正しく解釈することが必要とされ、これは必ずしも容易または簡単なタスクではない。
【課題を解決するための手段】
【０００７】
本発明の実施形態は、マネージコード実行環境のコンテキストにおいて実行時に先立ってコーディングエラーを低減するためのコンピュータ実施される方法に関する。
【０００８】
この方法は、開発者に複数のマネージコードリソースに対するアクセスを提供することを含む。この方法はまた、開発者によって入力されたリソース識別子が、複数のマネージコードリソースの１つに対応することを検証することを含む。
【発明を実施するための最良の形態】
【０００９】
図１は、本発明の実施形態を実装することができる適切なコンピューティングシステム環境１００の一例を示している。コンピューティングシステム環境１００は、適切なコンピューティング環境の一例に過ぎず、本発明の使用または機能の範囲に関していかなる限定も示唆するものではない。コンピューティング環境１００は、例示的動作環境１００に示すコンポーネントの任意の１つまたは組合せに関するいかなる依存または要件を有するものと解釈すべきでもない。
【００１０】
本発明は、数多くの他の汎用または専用のコンピューティングシステムの環境または構成で動作する。本発明で使用するのに適している可能性のある周知のコンピューティングシステム、環境および／または構成の例には、これらに限られないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な民生用電子機器、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、電話システム、上記のシステムやデバイスのいずれかを含む分散コンピューティング環境などが含まれる。
【００１１】
本発明は、コンピュータで実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的なコンテキストで記述することができる。一般に、プログラムモジュールには、特定のタスクを実行したり、特定の抽象データ型を実装したりする、ルーチン、プログラム、オブジェクト、コンポーネント、およびデータ構造などが含まれる。本発明はまた、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールは、メモリ記憶装置を含むローカルおよびリモートの両方のコンピュータ記憶媒体に配置することができる。
【００１２】
図１を参照すると、本発明を実装するための例示的システムは、コンピュータ１１０の形態で汎用コンピューティング装置を含んでいる。コンピュータ１１０のコンポーネントには、これらに限られないが、中央処理装置１２０、システムメモリ１３０、そしてシステムメモリを含む様々なシステムコンポーネントを処理装置１２０に結合するシステムバス１２１が含まれ得る。
【００１３】
システムバス１２１は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含むいくつかのタイプのバス構造のいずれかとすることができる。限定ではなく例として、このようなアーキテクチャには、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、およびメザニン（Ｍｅｚｚａｎｉｎｅ）バスとしても知られるＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスが含まれる。
【００１４】
コンピュータ１１０は、通常、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ１１０によってアクセスすることができる任意の利用可能な媒体とすることができ、それには、揮発性および不揮発性、リムーバブルおよび非リムーバブルの両媒体が含まれる。限定ではなく例として、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報の格納のための任意の方法または技術で実装された揮発性および不揮発性、リムーバブルおよび非リムーバブルの両媒体が含まれる。コンピュータ記憶媒体には、これらに限られないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（デジタル多用途ディスク）または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気ディスク記憶装置、あるいは所望の情報を格納するために使用することができ、コンピュータ１１０によってアクセスすることができる他の任意の媒体が含まれる。通信媒体は、通常、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを搬送波または他のトランスポート機構などの変調されたデータ信号に具体化し、任意の情報配送媒体を含む。用語「変調されたデータ信号」は、信号に情報をエンコードするように１つまたは複数の信号特性が設定または変更された信号を意味する。限定ではなく例として、通信媒体には、有線ネットワークまたは直接配線接続などの有線媒体、ならびに、音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体が含まれる。上記の任意の組合せも、コンピュータ可読媒体の範囲に含まれるものとする。
【００１５】
システムメモリ１３０は、ＲＯＭ（リードオンリメモリ）１３１およびＲＡＭ（ランダムアクセスメモリ）１３２などの揮発性および／または不揮発性のメモリの形態のコンピュータ記憶媒体を含む。起動時などにコンピュータ１１０内の要素間で情報を転送するのを助ける基本ルーチンが入っている基本入出力システム（ＢＩＯＳ）１３３は、通常、ＲＯＭ１３１に格納されている。ＲＡＭ１３２は、通常、処理装置１２０によって即座にアクセス可能であり、そして／または現在操作されているデータおよび／またはプログラムモジュールを収容する。限定ではなく例として、図１には、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６およびプログラムデータ１３７を示している。
【００１６】
コンピュータ１１０は、他のリムーバブル／非リムーバブルの揮発性／不揮発性のコンピュータ記憶媒体を含むことがある。単に例として、図１は、非リムーバブルで不揮発性の磁気媒体との間で読み取りまたは書き込みを行うハードディスクドライブ１４１、リムーバブルで不揮発性の磁気ディスク１５２との間で読取りまたは書込みを行う磁気ディスクドライブ１５１、そしてＣＤ  ＲＯＭまたは他の光媒体などのリムーバブルで不揮発性の光ディスク１５６との間で読み取りまた書き込みを行う光ディスクドライブ１５５を示している。この例示的な動作環境において使用することができる他のリムーバブル／非リムーバブル、揮発性／不揮発性のコンピュータ記憶媒体には、これらに限られないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、半導体ＲＡＭおよび半導体ＲＯＭなどが含まれる。ハードディスクドライブ１４１は、通常、インターフェース１４０などの非リムーバブルメモリインターフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、通常、インターフェース１５０などのリムーバブルメモリインターフェースによってシステムバス１２１に接続される。
【００１７】
図１に示し、上で論じたドライブおよび関連するコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュールおよびコンピュータ１１０のための他のデータのストレージを提供する。図１では、たとえば、ハードディスクドライブ１４１がオペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６およびプログラムデータ１４７を格納するものとして図示されている。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じものであっても、異なるものであってもよいことに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６およびプログラムデータ１４７には、これらが少なくとも異なるコピーであることを示すために、ここでは異なる番号が与えてられている。
【００１８】
ユーザは、キーボード１６２、マイクフォン１６３、そしてマウス、トラックボールまたはタッチパッドのようなポインティングデバイス１６１などの入力装置を介して、コマンドおよび情報をコンピュータ１１０に入力することができる。他の入力装置（図示せず）には、ジョイスティック、ゲームパッド、衛星アンテナ、スキャナなどが含まれ得る。これらおよびその他の入力装置は、システムバスに結合されているユーザ入力インターフェース１６０を介して処理装置１２０に接続されることが多いが、パラレルポート、ゲームポートまたはＵＳＢ（ユニバーサルシリアルバス）などの他のインターフェースおよびバス構造によって接続することもできる。モニタ１９１または他のタイプの表示装置も、ビデオインターフェース１９０などのインターフェースを介してシステムバス１２１に接続される。モニタに加え、このコンピュータはまた、出力周辺装置インターフェース１９５を介して接続することができるスピーカ１９７およびプリンタ１９６など他の周辺出力装置を含むことができる。
【００１９】
コンピュータ１１０は、リモートコンピュータ１８０などの１つまたは複数のリモートコンピュータへの論理接続を用いたネットワーク化された環境で動作することができる。リモートコンピュータ１８０は、パーソナルコンピュータ、ハンドヘルドデバイス、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の共通ネットワークノードとすることができ、通常、コンピュータ１１０に関して上述した要素の多くまたは全てを含む。図１に示す論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１、およびワイドエリアネットワーク（ＷＡＮ）１７３を含むが、他のネットワークを含むこともある。このようなネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的である。
【００２０】
ＬＡＮネットワーキング環境で使用されるとき、コンピュータ１１０は、ネットワークインターフェースまたはアダプタ１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーキング環境で使用されるとき、コンピュータ１１０は、通常、モデム１７２や、インターネットなどのＷＡＮ１７３を介して通信を確立するための他の手段を含む。モデム１７２は、内蔵でも外付けでもよく、ユーザ入力インターフェース１６０または他の適切なメカニズムを介してシステムバス１２１に接続することができる。ネットワーク環境では、コンピュータ１１０に関して示されたプログラムモジュールまたはその部分をリモートメモリ記憶装置に格納してもよい。限定ではなく例として、図１では、リモートコンピュータ１８０上に常駐するリモートアプリケーションプログラム１８５が示されている。ここに示したネットワーク接続は例示的なものであり、コンピュータ間で通信リンクを確立する他の手段を使用することもできることが理解されよう。
【００２１】
図２は、本発明の一態様によるコード開発環境２０１を示す模式的なブロック図である。この環境は、設計プログラム２０２およびマネージコードインフラストラクチャ２０４を含む。インフラストラクチャ２０４は、必須ではないが例示として、マネージコード実行環境であり、これだけに限られないが、たとえば、ワシントン州レドモンドのマイクロソフトコーポレーションによって提供される既存の．ＮＥＴフレームワークを組み込んだ環境である。
【００２２】
設計プログラム２０２は、開発ツール、特にプログラミング環境であり、マネージコードインフラストラクチャ２０４と共に動作して、アプリケーションの設計、構築、テストおよび展開を行うためのツールを提供する。設計プログラム２０２は、必須ではないが例示として、マイクロソフトコーポレーションによって提供されるＶＩＳＵＡＬ  ＳＴＵＤＩＯ．ＮＥＴの製品ラインのプログラムである。マネージコードインフラストラクチャ２０４は、例示として、クロス言語対応コードをサポートするように構成されているマネージコード実行環境を組み込んでいる。一実施形態によれば、インフラストラクチャ２０４は、マイクロソフトコーポレーションの．ＮＥＴインフラストラクチャの共通言語ランタイムコンポーネントを組み込み、この場合、設計プログラム２０２は、少なくとも部分的にＣＬＳ準拠のコードを生成する際にマネージコードインフラストラクチャ２０４と連携するように構成されている。
【００２３】
本発明の一態様によれば、マネージコードインフラストラクチャ２０４および設計プログラム２０２は連携して、マネージコードインフラストラクチャ２０４によってサポートされる言語のリソース情報２０７を管理するリソースマネージャ２０８を提供する。一実施形態によれば、リソース情報２０７は、ＣＬＳ準拠リソースに関連する情報を含む。図２内では、リソースマネージャ２０８および情報２０７は、プログラム２０２およびインフラストラクチャ２０４とは別個の点線で囲まれたボックスに示されている。このような配置は、その具体的な実装形態が本発明には重要でないということを反映するように意図されている。リソースマネージャおよび情報は、インフラストラクチャ２０４の部分、プログラム２０２の部分、または別個のコンポーネントとして、あるいは他の方法で実装することができよう。
【００２４】
リソース要求は、様々な周知の許容可能な方法のいずれかによってリソースマネージャ２０８に伝えられる。一実施形態によれば、リソースは、例示的には「ＧｅｔＳｔｒｉｎｇ（文字列ＫｅｙＮａｍｅ）」メソッドによって要求される。たとえば、設計時に、開発者は、プログラム２０２とインターフェースをとり、リソースマネージャ２０８に対する呼出し、たとえばリソース情報２０７の部分として維持されているＣＬＳ準拠コンポーネントの呼出しを組み込むコードを作成する。コード化されたリソースの呼出しは、例示として、所望のリソースに関連付けられた文字列およびキー名の指示を含む。コード化されたリソースの呼出しに基づいて、プロセスのある時点で、対応する文字列のリソース要求が「ＧｅｔＳｔｒｉｎｇ（文字列ＫｅｙＮａｍｅ）」呼出しを利用して、リソースマネージャ２０８に対して行われる。文字列および／またはキー名が設計時に正しく入力されていない場合（たとえばＫｅｙＮａｍｅ中の誤字）、そのエラーが実行時までに容易に発見できないことは珍しくない。重ねて、記載のＧｅｔＳｔｒｉｎｇメソッド以外のメソッドを本発明の範囲から逸脱することなく利用することができる。
【００２５】
本発明の一態様によれば、設計プログラム２０２は、実行時に先立ってリソースのアドレス設定におけるエラーを低減または除去するように一般的に構成された文字列リソース（ＳｔｒｉｎｇＲｅｓ）ツール２０６を含む。ＳｔｒｉｎｇＲｅｓツール２０６は、例示として、文字列リソースをより良く管理するのを助けるために設計プログラム２０２を補足するカスタムツールである。一実施形態によれば、ＳｔｒｉｎｇＲｅｓツール２０６は、設計プログラム２０２の一体部分として出荷される。他の実施形態によれば、ＳｔｒｉｎｇＲｅｓツール２０６は、プログラム２０２に統合またはインストールすることができるアップグレードである。
【００２６】
設計プログラム２０２がＳｔｒｉｎｇＲｅｓツール２０６を含むと想定すると、一実施形態によれば、このツールは、設計プログラム２０２を利用する開発者によって開始された任意のコーディングプロジェクトに関連して自動的に実装される。しかし、他の実施形態によれば、特定のプロジェクトのコンテキストにおいてツールが開始またはインストールされたときに限り（すなわち、ツールがプロジェクトごとに選択的に起動される）、開発者にツール２０６の機能が提供される。
【００２７】
図３は、設計プログラム２０２のインターフェースがどのように見えるかの一例を示すスクリーンショット３００である。開発者が、例示として、コーディング領域３０２にコードを入力する。ハイライトされたタブ３０４によって示されているように、スクリーンショット３００の特定のコンテキストにおいて、開発者が、「Ｆｏｒｍ１．ｃｓ」と指定されたファイルに関連するコードを作成している。
【００２８】
ファイル選択領域３０５は、開発者が異なるファイルおよび異なるプロジェクトの間で移動できるように提供されている。コンフィギュレーション領域３０６は、開発者がＳｔｒｉｎｇＲｅｓツール２０６など様々なプログラミングツールを少なくとも選択的にアクティブ化または非アクティブ化できるように提供されている。領域３０６内に示すように、スクリーンショット３００の特定のコンテキストでは、ＳｔｒｉｎｇＲｅｓツールが、「ＦＯＲＭ１．ＲＥＳＸ」ファイルに関連してアクティブ化されている。したがって、ＳｔｒｉｎｇＲｅｓツールの機能が、開発者がＦＯＲＭ１．ＲＥＳＸファイルのコンテキストでコードを入力するとき、開発者に提供されることになる。一実施形態によれば、この機能はまた、Ｆｏｒｍ１．ｒｅｓｘファイルと所定の階層関係を持つファイルに拡張されることになる。したがって、本発明の一態様によれば、ＳｔｒｉｎｇＲｅｓツールは、要望に応じてアクティブ化されるカスタムプログラミングツールとして実装される。この説明の目的上、ＳｔｒｉｎｇＲｅｓツール２０６は、コーディング領域３０２で開かれたファイルである「ＦＯＲＭ１．ＣＳ」ファイルに対してもアクティブ化されていると想定することにする。
【００２９】
これを念頭において、本発明の一態様によれば、ＳｔｒｉｎｇＲｅｓツールに関連付けられたサブシステム（たとえばプロジェクト管理サブシステム）は、作業中のプロジェクトに使用されている特定のＣＬＲ準拠言語に従って応答することができる。新しいファイルがプロジェクトに加えられるか、または（たとえばＣｕｓｔｏｍ  Ｔｏｏｌプロパティに触れることにより）既存のファイルが修正されると、そのファイルの親が検査される。その親が、プロジェクトがＣ＃、Ｃ＋＋、ＶＢなどであるかを判定する。この判定に基づいて、コードがそのプロジェクトの適切な言語で出力される。このようにして、１つの設計プログラムのソリューションが複数のプロジェクトを収容することができ、ＳｔｒｉｎｇＲｅｓツールがこれに対応することができる。
【００３０】
本発明の一態様によれば、ＳｔｒｉｎｇＲｅｓツール２０６は、リソースのアドレス／インデックス情報へ、そして任意選択的にカタログ化されたリソースに対応する値への使い勝手のよい設計時のアクセシビィティを提供する。本発明の一実施形態によれば、リソースへのアクセスは、ステートメントおよび機能の完了において開発者を補助するポップアップウィンドウおよび／またはドロップダウンリスト（たとえば設計プログラムインターフェース内に直接）に表示される情報の形態で提供される。たとえば、利用可能なリソースに対応する識別子情報（すなわち、キー名、文字列および／または値の情報）が、選択およびステートメントの完了のために開発者に表示される。
【００３１】
一実施形態によれば、有効なリソース情報が、特定リソースの参照のために表示される。たとえば、リソースオブジェクト、コマンドまたは関数の入力に続いて、アクティベーターキーによって、現在のコマンドまたは関数のための有効な値のドロップダウンリストの表示が開始される。本発明の一実施形態によれば、アクティベーターキーは、ピリオド（．）である。他の実施形態によれば、アクティベーターキーは、スペースキー、左（開き）括弧、または何らかの他のキー呼出しである。一実施形態によれば、ドロップダウンリストをナビゲート（すなわちスクロール）するか、またはタイプし、利用可能な選択の１つで（たとえば所定の時間の間）停止することによって、追加の情報がドロップダウンメニューの近傍のポップアップウィンドウに現れるようにするであろう。
【００３２】
一実施形態によれば、開発者がリソース情報の自動配送のステータスを自動、手動またはディスエーブルに調整できるようにする設計プログラムインターフェース上のオプションが開発者に提供される。自動に設定した場合、アクティベーターキーを押したときリソースリストが自動的に現れる。手動に設定した場合、開発者は、カーソルが情報のアベイラビリティに関連付けられたところに位置決めされると、（たとえば編集メニューコマンド、ショートカットメニュー選択またはＣＴＲＬキーの組合せを用いて）リソース情報の表示を選択的にアクティブ化することができる。一実施形態によれば、ＣＬＳ準拠リソースと特に関連する情報は、ＳｔｒｉｎｇＲｅｓツール２０６のコンポーネントとして提供される上述の設計プログラムインターフェースのアップグレードを通じて開発者に利用可能になされる。
【００３３】
一般的にいえば、ＳｔｒｉｎｇＲｅｓツール２０６は、リソース識別子および対応する情報、特にＣＬＳ準拠リソースに関連する識別子および情報の選択のための効率的な相互参照を可能にする。したがって、本発明の一態様によれば、開発者がリソースクラスを入力し、それに続けてアクティベーションキーを入力すると、関連するアクセス可能なメソッドおよびプロパティを示すリスト（たとえばドロップダウンメニュー）が自動的に提供される。一実施形態によれば、自動的に生成されたリストは、利用可能な文字列のキー名のコレクションである。他の実施形態によれば、キー名の１つをハイライトすると、（たとえばポップアップボックス内に）関連する文字列の値の提供が開始される。
【００３４】
図４は、設計プログラム２０２のインターフェースの別の例を示すスクリーンショット４００である。図４のショットは、大体は図３のショットと同様であり、ＳｔｒｉｎｇＲｅｓツール２０６がアクティブ化されているという想定は有効のままである。コーディング領域内の位置４２５で、開発者は「ＦＯＲＭ１１」とキー入力したが、これは例示として、リソース識別子の入力に対する先行（ｐｒｅｃｕｒｓｏｒ）である。この先行に続いて、開発者は、ピリオド（．）をキー入力したが、これは、例示として、ＳｔｒｉｎｇＲｅｓツール２０６からの応答をドロップダウンメニュー４３０の形態で開始するアクティベーターキーである。メニュー４３０は、例示として、対応する先行エントリに有効なリソース情報を収容している。
【００３５】
一実施形態によれば、ドロップダウンボックス中の情報は、階層的に配置される。たとえば、リソースは、例示的には、複数の言語ベースで利用可能とすることができ、それぞれの言語は、より広いソースエレメントに関連する階層的エレメントとしてボックス中に表示された個々のエレメントに対応している。もちろん、編成は言語以外の任意のファクタに基づいて行うことができる。メニュー４３０は、例示した６つの選択肢より多くを収容するように（たとえばスクロール可能なアルファベット順のリストまたは他の配列で）構成することができることに留意されたい。メニュー４３０にリストされたエレメントは、必須ではないが、ＣＬＳ準拠のエレメントなどのエレメントに対応するキー名とすることができる。
【００３６】
この例を続けて、開発者は、メニュー４３０を通してナビゲートし、「ＭＩＣＨＥＬＬＥＬＯＣ」エントリ上で停止する。このエントリで一時停止すると、例示として、対応するポップアップボックス４３６が現れ始め、このポップアップボックスは、メニュー４３０から選択されたエレメントに関連する文字列および／または値の情報を収容する。最終的には、開発者はメニュー４３０からのエントリの１つを選択することになる。この選択により、リソースのキー名、文字列および／または値が、適切な位置でコードに自動的に挿入されることになる。
【００３７】
図５は、本発明の一実施形態に関連付けられるステップを例示するフローチャートである。ブロック５０２では、開発者にＣＬＳ準拠リソースへのアクセスが提供される。ステップ５０４では、コード開発期間中に、それぞれがＣＬＳ準拠リソースを表すリソース識別子のコレクションが開発者に提示される。ステップ５０６で示すように、開発者は次いで、所望のＣＬＳ準拠リソースを表す識別子をこのコレクションから選択する。最後に、ステップ５０８では、対応し、正確な情報が開発者のプロジェクトに組み込まれる。
【００３８】
本発明の他の態様によれば、ＳｔｒｉｎｇＲｅｓツール２０６は、リソース、特にＣＬＳ準拠リソースが間違ってアドレスされたかどうかを判定する構築時チェックのサポートが提供される。このチェックは、コード中のリソース識別子の値を有効な値のコレクション（たとえば、リソース情報を上述のように設計時に提供するのをサポートするために維持しているものと同じリソース値のコレクション）と比較することによって行われる。格納された値とマッチしないリソース値がある場合、例示的には、エラーが訂正のために開発者に提示されることになる。一実施形態によれば、システムが新しいかまたは異なるリソース入力を受け入れるようにシステムを構成する必要に応じて、開発者が有効な値のリストに情報を追加できるようにシステムが構成される。
【００３９】
一実施形態によれば、図３のスクリーンショットを参照して、リソースツールを新しいリソース情報に拡張するために、開発者が、領域３０５のソリューションエクスプローラ（ｓｏｌｕｔｉｏｎ  ｅｘｐｌｏｒｅｒ）内のプロジェクトを（たとえば右クリック）選択する。開発者は次いで、「．ｓｔｒｉｎｇｓ」の拡張子を有するファイルのプロジェクトファイルへの追加を開始することができる。新しい文字列が次いで、必要に応じて．ｓｔｒｉｎｇｓファイルに追加される。
【００４０】
さらに１つの特定の実施形態によれば、新しいリソース情報を追加するために、開発者はまず、ソリューション領域３０５のプロジェクトを選ぶ（すなわち右クリックする）ことによって、機能オプションのメニューを提示する。開発者は次いで、ダイアログを提示するために「新しいアイテムを追加」機能を選択する。開発者は次いで、「．ｓｔｒｉｎｇｓ」の拡張子を有するファイルをプロジェクトに追加するために、「リソース」カテゴリおよび「文字列リソースツール」サブカテゴリを選ぶ。ソリューションエクスプローラ中の「すべてのファイルを表示」オプションを選択すると、例示として、．ｓｔｒｉｎｇｓファイルが２つの子のアイテム「．ｃｓ」ファイルおよび「．ｒｅｓｘ」ファイルを有することが明らかにされることになる。子ファイルは、．ｓｔｒｉｎｇｓファイルから生成されるので、例示として、直接編集されない。このファイルは、構築時に生成されるのではなく、．ｓｔｒｉｎｇｓファイル、あるいは．ｓｔｒｉｎｇｓファイルのＣｕｓｔｏｍ  ＴｏｏｌプロパティまたはＣｕｓｔｏｍ  Ｔｏｏｌ  Ｎａｍｅｓｐａｃｅプロパティに変更があったときは常に生成される。
【００４１】
リソース情報に追加するために、開発者は、たとえばフォーマット「＜ｋｅｙＮａｍｅ＞＝＜値＞」）」を用いて．ｓｔｒｉｎｇｓファイルに情報を単に追加する。このフォーマットの一例は、次の通りである。
【００４２】
ＳｉｍｐｌｅＭｓｇ＝これは単純なメッセージです。
【００４３】
．ｓｔｒｉｎｇｓファイルのデフォルトのファイル名は、例示的にはＳＴＲ１．ｓｔｒｉｎｇｓであり、これは、子の「ｃｓ．」ファイルにおいて「ＳＴＲ１」と名付けられたクラスを生成する（クラス名はファイル名に由来する）。したがって、たとえばＣ＃プログラミング環境内では、下記が正確な例であろう。
【００４４】
ＳＴＲ１．ＳｉｍｐｌｅＭｓｇ；／／これから返される文字列は、「これは単純なメッセージです。」であろう。
【００４５】
ｓｔｒｉｎｇ．フォーマットを使用する共通の操作は、例示的には、ツールによっても取り扱われる。一例は、次の通り。
【００４６】
ＦｉｌｅＮｏｔＦｏｕｎｄＥｒｒｏｒ（ファイル名，説明，リトライ回数）＝｛１｝のためにファイル｛０｝が見つかりませんでした。リトライ試行回数は｛２｝でした。
【００４７】
所与のパラメータの型を指定しないと、例示的には、Ｓｙｓｔｅｍ．Ｓｔｒｉｎｇがデフォルトの型になる。Ｃ＃プログラミング環境内では、適用可能な例は次の通り。
【００４８】
ＳＴＲ１．ＦｉｌｅＮｏｔＦｏｕｎｄＥｒｒｏｒ（“ｍｙＦｉｌｅ．ａｂｃ”，「ファイルが削除されました」，３０；／／これをプリントするでしょう：ファイルが削除されたためファイルｍｙＦｉｌｅａｂｃが見つかりませんでした。リトライ試行回数は３０回でした。
【００４９】
．ｓｔｒｉｎｇｓファイル中のコメントは、例示的には、ポンド記号（＃）またはセミコロン（；）で始まる。ポンド記号でマークされたコメントは、例示的には、外部から見えないが、セミコロンでマークされたコメントは、一般に利用可能である。外部から見られるべきコメントは、．ｒｅｓｘファイルに出力される。ＳｔｒｉｎｇＲｅｓツールは、例示的には、ラインの最初の文字が「＃」または「；」である場合にのみ、有効なコメントラインを認識する。
【００５０】
．ｓｔｒｉｎｇｓファイル中の各メッセージは、例示的には、自動生成されたクラス中に２つのアクセサを生成する。１つは、「言語中立」のためのものであり、もう１つは「指定言語」のためのものである。単純なタイプのメッセージでは、アクセサはフィールドである。パラメータとして言語を追加するには、関数が追加され、名前が若干変更される（たとえば「Ｌｏｃ」フィールド名が付加される）。パラメータを取るメッセージでは、名前は変更されず、パラメータリストだけが変化する（すなわちＣｕｌｔｕｒｅＩｎｆｏパラメータが追加される）。自動生成された．ｃｓファイルに目を通すことにより詳細が明らかになるであろう。
【００５１】
．ｓｔｒｉｎｇｓファイルは、プロジェクトに追加されると、例示的には、Ｃｕｓｔｏｍ  Ｔｏｏｌプロパティを「ＳｔｒｉｎｇＲｅｓ」に、Ｃｕｓｔｏｍ  Ｔｏｏｌ  Ｎａｍｅｓｐａｃｅをヌルに、Ｂｕｉｌｄ  Ａｃｔｉｏｎを「ｎｏｎｅ」に設定する。ＳｔｒｉｎｇＲｅｓの出力のネームスペースはプロジェクトから得られるが、例示的には、Ｃｕｓｔｏｍ  Ｔｏｏｌ  Ｎａｍｅｓｐａｃｅを出力の所望のネームスペースに設定することによってオーバライドすることができる。
【００５２】
設計プログラムがＳｔｒｉｎｇＲｅｓツールをカスタムツールとして認識する方法は、例示として、ＳｔｒｉｎｇＲｅｓに設定されたＣｕｓｔｏｍ  Ｔｏｏｌプロパティを有するソリューションエクスプローラ中のファイルによってである。したがって、Ｃｕｓｔｏｍ  ＴｏｏｌプロパティがＳｔｒｉｎｇＲｅｓに設定され、ファイルが有効なフォーマットである限り、（すなわちＣ＃プロジェクト内で）．ｔｘｔまたは．ａｂｃファイルを追加してもかまわない。
【００５３】
プロダクションとして環境中立（ｃｕｌｔｕｒｅ−ｎｅｕｔｒａｌ）のリソースを展開後、例示として、バイナリに触れることなく、また再構築する必要なく、いつでもｌｏｃリソースを展開することができる。文字列リソースが要求され、実行時に利用できない場合、リソースの階層が例示的にはトラバースされ、階層のルートが環境中立リソースセットである。そのため、日本語の文字列が要求されたが、利用できない場合、英語の文字列が返されることになる。あとで日本語リソースセットが利用可能になると、日本語の文字列が代わりに返されることになる。
【００５４】
一例として、以下のシナリオを検討する。
１）ＡｐｐＸが、ＡｐｐＸ実行可能ファイルに組み込まれた文字列リソースを使用する。
２）６週間後、オーストリアでＡｐｐＸについて急な関心が持ち上がり、オーストリア系ドイツの言語は、Ｓｙｓｔｅｍ．Ｌｏｃａｌｉｚａｔｉｏｎ．ＣｕｌｔｕｒｅＩｎｆｏクラスにおいて「ｄｅ−Ａｔ」である。
３）ＡｐｐＸの実行可能ディレクトリにおいて、「ｄｅ−ＡＴ」のサブディレクトリが標準ドイツ語の「ｄｅ」の１つと共に作成される。
４）オーストリア系ドイツ語のローカルベンダ（ｌｏｃ  ｖｅｎｄｏｒ）は遅れるが、ローカライズされたリソースは、標準ドイツ語では遅れずに受け取られる。
５）ローカライズされたリソースは、「ｄｅ」サブディレクトリにドロップされ、この場合、ｌｏｃリソースが起動中にドロップされた（たとえばサービスをリスタートする必要はない）ので、ＡｐｐＸは引き続き稼動している。
６）「ｄｅ−ＡＴ」の文字列の要求は、「ｄｅ」の文字列で返され、
７）後日、「ｄｅ−ＡＴ」のリソースがドロップされたときに、代わって返される。
【００５５】
一実施形態によれば、ＳｔｒｉｎｇＲｅｓツールは複数の文字列を管理するように構成され、その表現が、（たとえばドロップダウンリストボックス内に）何らかの形態でユーザに提供される。ツールは自動コンプリート機能を提供し、ＳｔｒｉｎｇＲｅｓが管理しているエントリの１つをユーザが選択（たとえばドロップダウンリストボックスから選択）するとき、その文字列の値が（たとえばポップアップボックス内で）何らかの形態でユーザに提供される。
【００５６】
たとえば、ＳｔｒｉｎｇＲｅｓツールが「ｍｙＳｔｒｉｎｇ＝これは私の文字列です」を含むＳＴＲ１．ｓｔｒｉｎｇｓを管理しているシナリオを考える。設計プログラムインターフェース内で、ユーザが、（たとえばＶｉｓｕａｌＳｔｕｄｉｏ．ｎｅｔ  ＩＤＥとして）適切な位置にＳＴＲ１をタイプすると、対応するオプションのリストが（たとえばドロップダウンリストボックス内に）提示されることになる。ユーザがオプションのリストからｍｙＳｔｒｉｎｇを選択すると、ツールが、対応する値（たとえば「これは私の文字列です」）を報告することになる。一実施形態によれば、値がバルーンまたはポップアップボックス内で報告される。したがって、ユーザは、設計時にアドレスされた文字列の＊＊値＊＊を得ることができる。
【００５７】
ここに記載の方法は、一般に、リソースのアドレスシングエラーを削減または除去し、それによって、エラーがアプリケーションに導入されるのを防止する。リソース、特にＣＬＳ準拠リソースの値を設計時に提供することによって、コード開発の生産性および正確性を向上する。
【００５８】
本明細書は、文字列がどのように具体的に．ｓｔｒｉｎｇｓファイルに追加されるかについての説明を含んでいる。本発明の一態様によれば、ＳｔｒｉｎｇＲｅｓツールは、標準のファイル（たとえば標準．ｒｅｓｘファイル）と共に機能する。一実施形態によれば、文字列の定義が、ＳｔｒｉｎｇＲｅｓツール機能を通じて利用可能になされた定義に追加されるとき、必要とされるすべては、名前／値のペア（たとえば「ｍｙＳｔｒｉｎｇ＝これは私の文字列です」）である。
【００５９】
本発明について特定の実施形態を参照して説明してきたが、当業者には、本発明の趣旨および範囲から逸脱することなく形態および細部を変更できることが理解されよう。
【図面の簡単な説明】
【００６０】
【図１】本発明を実施することができる１つのコンピューティング環境を示すブロック図である。
【図２】コード開発環境を示す模式的ブロック図である。
【図３】例示的なスクリーンショットである。
【図４】例示的なスクリーンショットである。
【図５】ＣＬＳ準拠リソースに関係する情報に直接アクセスすることに関連するステップを示すフローチャートである。
【符号の説明】
【００６１】
１００  コンピューティングシステム環境
１１０  コンピュータ
１２０  処理装置
１３０  システムメモリ
１３１  ＲＯＭ
１３２  ＲＡＭ
１３３  ＢＩＯＳ
１３４  オペレーティングシステム
１３５  アプリケーションプログラム
１３６  他のプログラムモジュール
１３７  プログラムデータ
１４０  非リムーバブル不揮発性メモリインターフェース
１４１  ハードディスクドライブ
１４４  オペレーティングシステム
１４５  アプリケーションプログラム
１４６  他のプログラムモジュール
１４７  プログラムデータ
１５０  リムーバブル不揮発性メモリインターフェース
１５１  磁気ディスクドライブ
１５２  磁気ディスク
１５５  光ディスクドライブ
１５６  光ディスク
１６０  ユーザ入力インターフェース
１６１  ポインティングデバイス
１６２  キーボード
１６３  マイクロフォン
１７０  ネットワークインターフェース
１７１  ローカルエリアネットワーク
１７２  モデム
１７３  ワイドエリアネットワーク
１８０  リモートコンピュータ
１８５  リモートアプリケーションプログラム
１９０  ビデオインターフェース
１９１  モニタ
１９５  出力周辺インターフェース
１９６  プリンタ
１９７  スピーカ
２０１  コード開発環境
２０２  設計プログラム
２０４  マネージコードインフラストラクチャ
２０６  文字列リソースツール
２０７  リソース情報
２０８  リソースマネージャ
３００  スクリーンショット
３０２  コーディング領域
３０４  ハイライトされたタブ
３０５  ファイル選択領域
３０６  コンフィギュレーション領域
４００  スクリーンショット
４２５  コーディング領域内の位置
４３０  ドロップダウンメニュー
４３６  ポップアップボックス
【図１】
2005267644.tif 000003
【図２】
2005267644.tif 000004
【図３】
2005267644.tif 000005
【図４】
2005267644.tif 000006
【図５】
2005267644.tif 000007
【外国語明細書】
2005267644000001.pdf