Gewusst wie: Zugreifen auf Eigenschaften bestimmter Projekttypen
Das allgemeine Automatisierungsmodell von Visual Studio enthält die Properties-Auflistung, mit der der Zugriff auf die Properties-Auflistungen eines beliebigen Visual Studio-Projekttyps möglich ist. Projekteigenschaften ermöglichen Ihnen u. a. das Steuern von Sicherheitseinstellungen sowie des Assemblynamens.
Um Projekteigenschaften manuell festzulegen und zu untersuchen, öffnen Sie in der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) von Visual Studio ein Projekt. Klicken Sie im Menü Projekt auf Eigenschaften. Das Dialogfeld Eigenschaften enthält mehrere Registerkarten, und in den einzelnen Bereichen werden die Eigenschaften aufgeführt, mit denen das Verhalten von Projekten definiert und gesteuert wird. Das Automatisierungsmodell ermöglicht Ihnen die programmgesteuerte Steuerung dieser Einstellungen. Insbesondere mithilfe der Eigenschaften in ProjectProperties3 können Sie die Projekteigenschaften in den Fensterbereichen Anwendung, Ressourcen, Einstellungen, Verweispfade und Signierung auf der Eigenschaftenseite für Visual C#-Projekte steuern. Mithilfe der in VBProjectProperties3 definierten Eigenschaften können Sie die Eigenschafteneinstellungen von Visual Basic-Projekten steuern. Die Einstellungen finden Sie in den Fensterbereichen Anwendung, Ressourcen, Einstellungen, Verweise und Signierung auf der Eigenschaftenseite.
Eigenschaften für Visual C#-Projekte werden in ProjectProperties3 definiert. Eigenschaften für Visual Basic-Projekte werden in VBProjectProperties3 definiert. Die MyApplication-Eigenschaft und die MyType-Eigenschaft sind für Visual Basic-Projekte spezifisch. Bei den verbleibenden Eigenschaften in VBProjectProperties3 handelt es sich um die gleichen Eigenschaften wie in ProjectProperties3.
Auf diese Eigenschaften kann nicht direkt durch das Umwandeln eines Properties-Objekts in ein ProjectProperties3-Objekt oder ein VBProjectProperties3-Objekt zugegriffen werden. Stattdessen erfolgt der Zugriff auf diese Eigenschaften über die Properties-Auflistung, indem der Name der Eigenschaft für den bestimmten Projekttyp als eine Zeichenfolge zum Festlegen von Property angegeben wird. So können Sie beispielsweise mithilfe des Codes EnvDTE.Property prop = EnvDTE.Properties.Item("ApplicationIcon"); auf die ApplicationIcon-Eigenschaft zugreifen.
Faktisch sind die in ProjectProperties3 und VBProjectProperties3 definierten Eigenschaften eine Verweisliste verfügbarer Eigenschaften für bestimmte Projekte, auf die als Projekteigenschaftenelemente zugegriffen werden kann.
In den nachfolgenden Schritten wird der programmgesteuerte Zugriff auf diese Eigenschaften in einem Visual Studio-Add-In ausführlich erläutert.
Tipp
Je nach den aktiven Einstellungen oder der Version unterscheiden sich die Dialogfelder und Menübefehle auf Ihrem Bildschirm möglicherweise von den in der Hilfe beschriebenen. Bei der Entwicklung dieser Verfahren war die Option Allgemeine Entwicklungseinstellungen aktiviert. Klicken Sie im Menü Extras auf Einstellungen importieren und exportieren, um die Einstellungen zu ändern. Weitere Informationen finden Sie unter Arbeiten mit Einstellungen.
So greifen Sie auf die Eigenschaften für einen bestimmten Projekttyp zu
Erstellen Sie in Visual C# ein Visual Studio-Add-In-Projekt.
Klicken Sie im Menü Projekt auf Verweis hinzufügen, klicken Sie auf die Registerkarte .NET, wählen Sie VSLangProj, VSLangProj2, VSLangProj80 und dann System.Windows.Forms aus, und klicken Sie auf OK.
Fügen Sie am Anfang der Datei Connect.cs die folgenden using-Anweisungen ein.
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90; using VSLangProj100; using System.Windows.Forms;
Fügen Sie der OnConnection-Methode nach der Zeile, die die _addInstance-Methode festlegt, wie unten dargestellt einen Aufruf einer neuen Methode mit dem Namen VSProjectProperies hinzu.
_applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; VSProjectProperties(_applicationObject);
Fügen Sie die VSProjectProperties-Methode direkt unterhalb der OnConnection-Methode hinzu.
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); } }
Die VSProjectProperties-Methode legt die AssemblyName-Eigenschaft fest und ruft diese ab, indem sie die Eigenschaft als Property-Elementzeichenfolge an die Properties-Auflistung übergibt. Wenn es sich bei dem Projekt um ein Visual Basic-Projekt handelt, legt die VSProjectProperties-Methode auch die MyType-Eigenschaft fest und ruft diese ab.
Im Beispielabschnitt wird der vollständige Code aufgeführt.
Erstellen Sie das Add-In, indem Sie im Menü Erstellen auf Projektmappe erstellen klicken.
Öffnen Sie in der Visual Studio-IDE ein Visual C#- oder Visual Basic-Projekt.
Klicken Sie im Menü Extras auf Add-In-Manager, und wählen Sie im Dialogfeld Add-In-Manager das Add-In aus. Klicken Sie auf OK, um das Add-In auszuführen.
Überprüfen Sie, ob der Assemblyname geändert wurde, indem Sie im Menü Projekt auf Eigenschaften klicken und dann im Eigenschaftenfenster die Registerkarte Anwendung auswählen.
Die programmgesteuerte Änderung hat sich auf den Wert im Feld Assemblyname ausgewirkt.
Beispiel
Das folgende Beispiel zeigt ein einfaches Visual Studio-Add-In, das den Zugriff auf projekttypspezifische Eigenschaften mithilfe der Visual Studio-Automatisierung veranschaulicht.
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
Kompilieren des Codes
Um den Code zu kompilieren, erstellen Sie ein neues Visual Studio-Add-In-Projekt und ersetzen den Code der OnConnection-Methode durch den Code im Beispiel. Informationen zum Ausführen eines Add-Ins finden Sie unter Gewusst wie: Steuern von Add-Ins mit dem Add-In-Manager.