次の方法で共有


CodeAttribute2.InfoLocation プロパティ

コード モデルを取得します。

名前空間:  EnvDTE80
アセンブリ:  EnvDTE80 (EnvDTE80.dll 内)

構文

'宣言
ReadOnly Property InfoLocation As vsCMInfoLocation
vsCMInfoLocation InfoLocation { get; }
property vsCMInfoLocation InfoLocation {
    vsCMInfoLocation get ();
}
abstract InfoLocation : vsCMInfoLocation
function get InfoLocation () : vsCMInfoLocation

プロパティ値

型 : EnvDTE.vsCMInfoLocation
vsCMInfoLocation 定数値。

解説

InfoLocation プロパティが vsCMInfoLocationProject を返す場合、プロパティの設定、StartPoint の取得、EndPoint の取得などを実行できます。あるコード モデル オブジェクト (A) から他のコード モデル オブジェクト (B) に移動した場合 (関数からその型に移動する場合やクラスからその基本クラスに移動する場合など)、B の定義が他のプロジェクトにあると、B の型が vsCMInfoLocationExternal になる場合があります。これは、オブジェクト B のプロジェクトがオブジェクト A のプロジェクトと同じ言語で実装されているかどうかなど、コード モデルの実装によって決まります。

InfoLocation プロパティが vsCMInfoLocationExternal を返す場合、使用できる情報は、DLL 内のメタデータ、または固定されたソースの情報だけです。StartPoint および EditPoint を取得できる場合もありますが、ドキュメントは編集できません。つまり、プロパティを設定したり、コード要素の背後にあるテキストを変更したりできません。

InfoLocation が vsCMInfoLocationNone を返す場合、使用できるのは名前を持つコード モデル オブジェクトだけです。また、ソース コードのコンテキストに基づいて、名前がクラスとインターフェイスのどちらであるかを区別できる場合もあります。ただし、区別できない場合にはそのオブジェクトは役に立ちません。これは、コード モデルは名前を実際の情報に解決できないためです。

[!メモ]

特定の種類の編集を行った後に、クラス、構造体、関数、属性、デリゲートなどのコード モデル要素の値を決定できないことがあります。つまり、これらの要素の値は、信頼できる値ではなく、常に同じ値になるとは限りません。詳細については、「コード モデルを使用したコードの調査 (Visual Basic)」で、コード モデル要素値を変更する方法についての説明を参照してください。

新しい名前空間および属性を現在のクラスに作成し、属性のプロパティの一部を一覧表示する例を次に示します。

public void CreateClassAndAttrib(DTE2 applicationObject)
{
    // Before running, load or create a project.
    FileCodeModel2 fcm2 = GetFileCodeModel(applicationObject);
    CodeAttribute2 cmAttribute;
    CodeClass2 cmClass;
    String msg = null;

    if (fcm2 != null)
    {
        CodeNamespace cmNamespace;
        // Try to create a new namespace.
        try
        {
            cmNamespace = fcm2.AddNamespace("CMNamespace", -1);
            // If successful, create the other code elements.
            if (cmNamespace != null)
            {
                cmClass = (CodeClass2)cmNamespace.AddClass("ANewClass", 
                -1, null, null, vsCMAccess.vsCMAccessPrivate);
                cmAttribute = (CodeAttribute2)cmClass.AddAttribute
                ("NewAttribute", "AttributeValue", -1);
                msg += "InfoLocation: " + cmAttribute.InfoLocation + 
                Environment.NewLine;
                msg += "IsCodeType?: " + cmAttribute.IsCodeType + 
                Environment.NewLine;
                msg += "Kind: " + cmAttribute.Kind + 
                Environment.NewLine;
                MessageBox.Show(msg);                       
            }
            else
            {
                MessageBox.Show("Cannot continue - no filecodemodel 
                available.");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("ERROR: " + ex);
        }
    }
}

public FileCodeModel2 GetFileCodeModel(DTE2 applicationObject)
{
    // Returns the FileCodeModel object of the active 
    // window.
    TextWindow txtWin = 
    (TextWindow)applicationObject.ActiveWindow.Object;
    FileCodeModel2 fcm2;
    if (txtWin != null)
    {
        try
        {
             fcm2 = (FileCodeModel2)txtWin.Parent.
             ProjectItem.FileCodeModel;
             return fcm2;
        }
        catch (Exception ex)
        {
             MessageBox.Show("ERROR: " + ex);
             return null;
        }
    }
    else
        return null;
}

.NET Framework セキュリティ

  • 直前の呼び出し元に対する完全な信頼。このメンバーは、部分的に信頼されているコードから使用することはできません。詳細については、「部分信頼コードからのライブラリの使用」を参照してください。

参照

関連項目

CodeAttribute2 インターフェイス

InfoLocation オーバーロード

EnvDTE80 名前空間

その他の技術情報

方法 : オートメーション オブジェクト モデルのコード例をコンパイルおよび実行する

コード モデルを使用したコードの調査 (Visual Basic)

コード モデルを使用したコードの調査 (Visual C#)