方法 : 特定のプロジェクトの種類のプロパティにアクセスする
Visual Studio の一般的なオートメーション モデルには、Properties コレクションが用意されています。このコレクションを使用して、Visual Studio のすべての種類のプロジェクトの Properties コレクションにアクセスできます。特に、プロジェクト プロパティを使用すると、セキュリティ設定、アセンブリ名などを制御できるようになります。
プロジェクト プロパティを手動で設定および調査するには、Visual Studio 統合開発環境 (IDE: Integrated Development Environment) でプロジェクトを開きます。[プロジェクト] メニューの [プロパティ] をクリックします。[プロパティ] ウィンドウには複数のタブがあり、各ペインには、プロジェクトの動作を定義および制御する際に使用するプロパティの一覧が表示されます。オートメーション モデルを使用すると、これらの設定をプログラムで制御できます。具体的には、Visual C# プロジェクトの場合、ProjectProperties3 のプロパティを使用すると、[プロパティ] ページの [アプリケーション]、[リソース]、[設定]、[参照パス]、および [署名] の各ウィンドウ ペインにあるプロジェクト プロパティを制御できます。VBProjectProperties3 で定義されたプロパティを使用すると、[プロパティ] ページの [アプリケーション]、[リソース]、[設定]、[参照設定]、および [署名] の各ウィンドウ ペインにある Visual Basic プロジェクトのプロパティ設定を制御できます。
Visual C# プロジェクトのプロパティは、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 アドインでこれらのプロパティにプログラムでアクセスする方法を説明します。
[!メモ]
実際に画面に表示されるダイアログ ボックスとメニュー コマンドは、アクティブな設定またはエディションによっては、ヘルプの説明と異なる場合があります。ここに記載されている手順は、全般的な開発設定が適用されているものとして記述されています。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。
特定の種類のプロジェクトのプロパティにアクセスするには
Visual C# を使用して、Visual Studio アドイン プロジェクトを作成します。
[プロジェクト] メニューの [参照の追加] をクリックし、[.NET] タブをクリックします。[VSLangProj]、[VSLangProj2]、[VSLangProj80]、および [System.Windows.Forms] を選択し、[OK] をクリックします。
次の using ステートメントを Connect.cs ファイルの先頭に追加します。
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90; using VSLangProj100; using System.Windows.Forms;
次に示すように、VSProjectProperies という名前の新しいメソッドの呼び出しを、OnConnection メソッドの _addInstance メソッドを設定する行の後に追加します。
_applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; VSProjectProperties(_applicationObject);
OnConnection メソッドの直後に VSProjectProperties メソッドを追加します。
public void VSProjectProperties(DTE2 dte) { try { // Open a Visual C# 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 == "{F184B08F-C81C-45F6-A5F6-5ABD9991F28F}") { 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 プロパティの設定と取得も実行します。
以下の使用例では、完全なコードを示します。
[ビルド] メニューの [ソリューションのビルド] をクリックし、アドインをビルドします。
Visual Studio IDE で、Visual C# プロジェクトまたは Visual Basic プロジェクトを開きます。
[ツール] メニューの [アドイン マネージャー] をクリックし、[アドイン マネージャー] ダイアログ ボックスからアドインを選択します。[OK] をクリックしてアドインを実行します。
[プロジェクト] メニューの [プロパティ] をクリックし、[プロパティ] ウィンドウの [アプリケーション] タブを選択して、アセンブリ名が変更されたことを確認します。
[アセンブリ名] フィールドには、プログラムで加えた変更が反映されます。
使用例
基本的な Visual Studio アドインの例を次に示します。この例では、Visual Studio のオートメーションを使用して、プロジェクトの種類に固有のプロパティにアクセスする方法について説明します。
using System;
using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using EnvDTE90;
using EnvDTE90a;
using EnvDTE100;
using System.Windows.Forms;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
using VSLangProj90;
using VSLangProj100;
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# 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 EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Imports VSLangProj100
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# 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 メソッドのコードをこの例のコードで置き換えます。アドインの実行方法については、「方法: アドイン マネージャーを使用してアドインを制御する」を参照してください。