次の方法で共有


方法 : 特定のプロジェクトの種類のプロパティにアクセスする

更新 : 2007 年 11 月

Visual Studio の一般的なオートメーション モデルには、Properties コレクションが用意されています。このコレクションを使用して、Visual Studio のすべての種類のプロジェクトの Properties コレクションにアクセスできます。特に、プロジェクト プロパティを使用すると、セキュリティ設定、アセンブリ名などを制御できるようになります。

プロジェクト プロパティを手動で設定および調査するには、Visual Studio 統合開発環境 (IDE: Integrated Development Environment) でプロジェクトを開きます。[プロジェクト] メニューの [プロパティ] をクリックします。[プロパティ] ウィンドウには複数のタブがあり、各ペインには、プロジェクトの動作を定義および制御する際に使用するプロパティの一覧が表示されます。オートメーション モデルを使用すると、これらの設定をプログラムで制御できます。具体的には、Visual C# プロジェクトおよび Visual J# プロジェクトの場合、ProjectProperties3 のプロパティを使用すると、[プロパティ] ページの [アプリケーション]、[リソース]、[設定]、[参照パス]、および [署名] の各ウィンドウ ペインにあるプロジェクト プロパティを制御できます。VBProjectProperties3 で定義されたプロパティを使用すると、[プロパティ] ページの [アプリケーション]、[リソース]、[設定]、[参照設定]、および [署名] の各ウィンドウ ペインにある Visual Basic プロジェクトのプロパティ設定を制御できます。

Visual C# プロジェクトおよび Visual J# プロジェクトのプロパティは、ProjectProperties3 で定義されています。Visual Basic プロジェクトのプロパティは、VBProjectProperties3 で定義されています。MyApplication プロパティおよび MyType プロパティは、Visual Basic プロジェクトのみに固有のプロパティです。VBProjectProperties3 内の残りのプロパティは、ProjectProperties3 内のプロパティと同じです。

これらのプロパティは、Properties オブジェクトを ProjectProperties3 オブジェクトまたは VBProjectProperties3 オブジェクトに直接キャストしてもアクセスできません。代わりに、これらのプロパティには、Properties コレクションを使用してアクセスする必要があります。この方法では、特定の種類のプロジェクトのプロパティ名を文字列として指定して、Property を指定します。たとえば、EnvDTE.Property prop = EnvDTE.Properties.Item("ApplicationIcon"); というコードを使用すると、ApplicationIcon プロパティにアクセスできます。

実際には、ProjectProperties3 および VBProjectProperties3 で定義されたプロパティは、特定のプロジェクトに使用できるプロパティの参照一覧です。特定のプロジェクトとは、プロジェクトのプロパティ項目としてアクセスできるプロジェクトです。

次の手順では、Visual Studio アドインでこれらのプロパティにプログラムでアクセスする方法を説明します。

ms228952.alert_note(ja-jp,VS.90).gifメモ :

使用している設定またはエディションによっては、表示されるダイアログ ボックスやメニュー コマンドがヘルプに記載されている内容と異なる場合があります。ここに記載されている手順は、全般的な開発設定が適用されているものとして記述されています。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。

特定の種類のプロジェクトのプロパティにアクセスするには

  1. Visual C# を使用して、Visual Studio アドイン プロジェクトを作成します。

  2. [プロジェクト] メニューの [参照の追加] をクリックし、[.NET] タブを選択します。[VSLangProj]、[VSLangProj2]、および [VSLangProj80] を選択し、[OK] をクリックします。

  3. 次の using ステートメントを Connect.cs ファイルの先頭に追加します。

    using VSLangProj;
    using VSLangProj2;
    using VSLangProj80;
    
  4. 次のメソッド呼び出しを OnConnection メソッドに追加します。

    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    VSProjectProperties(_applicationObject);
    
  5. OnConnection メソッドの直後に VSProjectProperties メソッドを追加します。

    public void VSProjectProperties(DTE2 dte)
    {
        try
        {
            // Open a Visual C#, Visual J#, or Visual Basic project
            // before running this add-in.
            Project project;
            project = _applicationObject.Solution.Projects.Item(1);
            Property prop;
            prop = project.Properties.Item("AssemblyName");
            MessageBox.Show("The assembly name is: " 
    + prop.Value .ToString());
            prop.Value = "MyTestAssembly";
            MessageBox.Show("The assembly name is now: " 
    + prop.Value.ToString());
            // If the project is a Visual Basic project, set
            // the MyApplication property.
            if (project.Kind == PrjKind.prjKindVBProject)
            {
                MessageBox.Show("The project is a Visual 
    Basic Project");
                prop = project.Properties.Item("MyType");
                MessageBox.Show("The MyType value is: " 
    + prop.Value.ToString());
                prop.Value = "Class Library";
                MessageBox.Show("The MyType value is now: " 
    + prop.Value.ToString());
            }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    

    VSProjectProperties メソッドは、AssemblyName プロパティの設定と取得の両方を実行します。これを実行するには、このプロパティを Property 項目の文字列として Properties コレクションに渡します。プロジェクトが Visual Basic プロジェクトの場合、VSProjectProperties メソッドは、MyType プロパティの設定と取得も実行します。

    以下の使用例では、完全なコードを示します。

  6. [ビルド] メニューの [ソリューションのビルド] をクリックし、アドインをビルドします。

  7. Visual Studio IDE で、Visual C#、Visual J#、または Visual Basic のプロジェクトを開きます。

  8. [ツール] メニューの [アドイン マネージャ] をクリックし、[アドイン マネージャ] ダイアログ ボックスからアドインを選択します。[OK] をクリックしてアドインを実行します。

  9. [プロジェクト] メニューの [プロパティ] をクリックし、[プロパティ] ウィンドウの [アプリケーション] タブを選択して、アセンブリ名が変更されたことを確認します。

    [アセンブリ名] フィールドには、プログラムで加えた変更が反映されます。

使用例

基本的な Visual Studio アドインの例を次に示します。この例では、Visual Studio のオートメーションを使用して、プロジェクトの種類に固有のプロパティにアクセスする方法について説明します。

using System;
using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using System.Windows.Forms;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
namespace myAddin
    public void OnConnection(object application, 
ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        VSProjectProperties(_applicationObject);
    }
    public void VSProjectProperties(DTE2 dte)
    {
        try
        {
            // Open a Visual C#, Visual J#, or Visual Basic project
            // before running this add-in.
            Project project;
            project = _applicationObject.Solution.Projects.Item(1);
            Property prop;
            prop = project.Properties.Item("AssemblyName");
            MessageBox.Show("The assembly name is: " 
+ prop.Value .ToString());
            prop.Value = "MyTestAssembly";
            MessageBox.Show("The assembly name is now: " 
+ prop.Value.ToString());
            // If the project is a Visual Basic project, set
            // the MyApplication property.
            if (project.Kind == PrjKind.prjKindVBProject)
            {
                MessageBox.Show
("The project is a Visual Basic Project");
                prop = project.Properties.Item("MyType");
                MessageBox.Show("The MyType value is: " 
+ prop.Value.ToString());
                prop.Value = "Class Library";
                MessageBox.Show("The MyType value is now: " 
+ prop.Value.ToString());
            }
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
Imports System
Imports Microsoft.VisualStudio.CommandBars
Imports Extensibility
Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80

    Public Sub OnConnection(ByVal application As Object, _
 ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, _
 ByRef custom As Array) Implements IDTExtensibility2.OnConnection
        _applicationObject = CType(application, DTE2)
        _addInInstance = CType(addInInst, AddIn)
        VSProjectProperties(_applicationObject)
    End Sub
    Sub VSProjectProperties(ByVal dte As DTE2)
        ' Open a Visual C#, Visual J#, or Visual Basic project
        ' before running this add-in.
        Try
            Dim project As Project
            project = _applicationObject.Solution.Projects.Item(1)
            Dim prop As [Property]
            prop = project.Properties.Item("AssemblyName")
            MsgBox("The assembly name is: "  _
            & prop.Value.ToString())
            prop.Value = "MyTestAssembly"
            MsgBox("The assembly name is now: "  _
            & prop.Value.ToString())
            ' If the project is a Visual Basic project, set
            ' the MyApplication property.
            If project.Kind = PrjKind.prjKindVBProject Then
                MsgBox("The project is a Visual Basic Project")
                prop = project.Properties.Item("MyType")
                MsgBox("The MyType value is: "  _
                & prop.Value.ToString())
                prop.Value = "Class Library"
                MsgBox("The MyType value is now: "  _
                & prop.Value.ToString())
            End If
        Catch ex As System.Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

コードのコンパイル方法

このコードをコンパイルするには、新しい Visual Studio アドイン プロジェクトを作成し、OnConnection メソッドのコードをこの例のコードで置き換えます。アドインの実行方法については、「方法 : アドイン マネージャを使用してアドインを制御する」を参照してください。

参照

概念

プロジェクト プロパティ

その他の技術情報

プロジェクトの種類に固有のプロジェクト、プロジェクト項目、および構成プロパティへのアクセス