方法 : 特定の種類のプロジェクトのファイルのプロパティにアクセスする
Visual Studio 統合開発環境 (IDE: Integrated Development Environment) では、プロジェクト内のファイルのファイル プロパティを手動で設定および調査できます。 ファイル プロパティを調査するには、Visual Studio でプロジェクトを開き、ソリューション エクスプローラーで、filename.cs などのプロジェクト ファイルを右クリックします。 ショートカット メニューの [プロパティ] を選択して [プロパティ] ダイアログ ボックスを表示します。 [プロパティ] ダイアログ ボックスには、選択したファイルに対して手動で設定できるファイル プロパティが表示されます。
VSLangProj80 名前空間には、Visual C# プロジェクトまたは Visual Basic プロジェクトのファイル プロパティにプログラムでアクセスする方法が用意されています。 具体的には、FileProperties2 では、ファイル情報を制御したり、ファイル情報にアクセスしたりするための豊富なプロパティ セットが定義されています。 FileProperties2 で定義されているプロパティには、ファイルの種類によっては有効でないプロパティもあります。 たとえば、DateCreated プロパティは、コード ファイルに対して定義されていますが、他のプロジェクト ファイルに対しては定義されていません。
特定の FileProperties2 プロパティにアクセスするには、次のコード例に示すように、そのプロパティの名前を文字列として EnvDTE.Property.Properties.Item(object index) に渡す必要があります。
Project project;
ProjectItems projItems;
ProjectItem projItem;
Property prop;
project = _applicationObject.Solution.Projects.Item(1);
projItems = project.ProjectItems;
projItem = projItems.Item(1);
prop = projItem.Properties.Item("FileName");
このコードでは、Visual C# プロジェクトまたは Visual Basic プロジェクト内のファイルの FileName プロパティにアクセスします。
実際には、FileProperties2 で定義されたプロパティは、Visual C# プロジェクトまたは Visual Basic プロジェクトのプロジェクト プロパティ項目としてアクセスできるファイルの利用可能なプロパティの参照一覧です。
次の手順では、Visual Studio アドインでファイル プロパティにプログラムでアクセスする方法を説明します。
注意
実際に画面に表示されるダイアログ ボックスとメニュー コマンドは、アクティブな設定またはエディションによっては、ヘルプの説明と異なる場合があります。 ここに記載されている手順は、全般的な開発設定が適用されているものとして記述されています。 設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。 詳細については、「設定の操作」を参照してください。
特定の種類のプロジェクトのファイル プロパティにアクセスするには
Visual C# を使用して、Visual Studio アドイン プロジェクトを作成します。
[プロジェクト] メニューの [参照の追加] をクリックし、[.NET] タブを選択します。[VSLangProj]、[VSLangProj2]、および [VSLangProj80] を選択し、[OK] をクリックします。
次の using ステートメントを Connect.cs ファイルの先頭に追加します。
using VSLangProj; using VSLangProj2; using VSLangProj80;
次のメソッド呼び出しを OnConnection メソッドに追加します。
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; VSProjectFileProps2(_applicationObject); }
VSProjectFileProps2 メソッドを OnConnection メソッドの直後に追加します。
public void VSProjectFileProps2(DTE2 dte) { try { // Open a Visual C# or Visual Basic project // before running this add-in. Project project; ProjectItems projItems; ProjectItem projItem; Property prop; project = _applicationObject.Solution.Projects.Item(1); projItems = project.ProjectItems; for(int i = 1 ; i <= projItems.Count; i++ ) { projItem = projItems.Item(i); prop = projItem.Properties.Item("FileName"); MessageBox.Show("The file name of item " + i + " is: " + prop.Value.ToString()); if (prop.Value.ToString().Contains(".cs") || prop.Value.ToString().Contains(".vb")) { prop = projItem.Properties.Item("FileSize"); MessageBox.Show("The file size of item " + i + " is: " + prop.Value.ToString()); prop = projItem.Properties.Item("DateCreated"); MessageBox.Show("The creation date of item " + i + " is: " + prop.Value.ToString()); } } } catch(Exception ex) { MessageBox.Show(ex.Message); } }
VSProjectFileProps2 は、プロジェクト内の各ファイルに対して FileName プロパティの一覧を表示します。 次に、このメソッドは、ファイルの拡張子が .cs または .vb であるかどうかを確認します。 確認できた場合は、Filesize プロパティ値および DateCreated プロパティ値も表示されます。
以下の使用例では、完全なコードを示します。
[ビルド] メニューの [ソリューションのビルド] をクリックし、アドインをビルドします。
Visual Studio IDE で、Visual C# プロジェクトまたは Visual Basic プロジェクトを開きます。
[ツール] メニューの [アドイン マネージャー] をクリックし、[アドイン マネージャー] ダイアログ ボックスからアドインを選択します。 [OK] をクリックしてアドインを実行します。
使用例
基本的な Visual Studio アドインの例を次に示します。この例では、Visual Studio のオートメーションを使用して、特定の種類のプロジェクト内のファイルのプロパティにアクセスする方法について説明します。
using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using System.Windows.Forms;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
public void OnConnection(object application,
ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
VSProjectFileProps2(_applicationObject);
}
public void VSProjectFileProps2(DTE2 dte)
{
try
{
// Open a Visual C# or Visual Basic project
// before running this add-in.
Project project;
ProjectItems projItems;
ProjectItem projItem;
Property prop;
project = _applicationObject.Solution.Projects.Item(1);
projItems = project.ProjectItems;
for(int i = 1 ; i <= projItems.Count; i++ )
{
projItem = projItems.Item(i);
prop = projItem.Properties.Item("FileName");
MessageBox.Show("The file name of item " + i + " is: "
+ prop.Value.ToString());
if (prop.Value.ToString().Contains(".cs")
|| prop.Value.ToString().Contains(".vb"))
{
prop = projItem.Properties.Item("FileSize");
MessageBox.Show("The file size of item " + i + " is: "
+ prop.Value.ToString());
prop = projItem.Properties.Item("DateCreated");
MessageBox.Show("The creation date of item " + i
+ " is: " + 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)
VSProjectFileProperties2(_applicationObject)
End Sub
Sub VSProjectFileProperties2(ByVal dte As DTE2)
' Open a Visual C# or Visual Basic project
' before running this add-in.
Try
Dim project As Project
Dim projItems As ProjectItems
Dim projItem As ProjectItem
Dim prop As [Property]
project = _applicationObject.Solution.Projects.Item(1)
projItems = project.ProjectItems
For i As Integer = 1 To projItems.Count
projItem = projItems.Item(i)
prop = projItem.Properties.Item("FileName")
MsgBox("The file name of item " & i & " is: " _
& prop.Value.ToString())
If (prop.Value.ToString().Contains(".cs") _
Or prop.Value.ToString().Contains(".vb")) Then
prop = projItem.Properties.Item("FileSize")
MsgBox("The file size of item " & i & " is: " _
& prop.Value.ToString())
prop = projItem.Properties.Item("DateCreated")
MsgBox("The creation date of item " & i & " is: " _
& prop.Value.ToString())
End If
Next i
Catch ex As System.Exception
MsgBox(ex.ToString)
End Try
End Sub
コードのコンパイル
このコードをコンパイルするには、新しい Visual Studio アドイン プロジェクトを作成し、OnConnection メソッドのコードをこの例のコードで置き換えます。 アドインの実行方法については、「方法: アドイン マネージャーを使用してアドインを制御する」を参照してください。