Freigeben über


Gewusst wie: Bearbeiten von Visual Basic- und C#-Projekten mit dem VSProject2-Objekt

Die VSProject2-Schnittstelle ermöglicht den Zugriff auf Methoden und Eigenschaften, die für Visual C#- und Visual Basic-Projekte spezifisch sind. VSProject2 ermöglicht durch die DTE- und Project-Eigenschaften auch den Zugriff auf die DTE- und Project-Objekte des allgemeinen Umgebungsmodells.

Die meisten Methoden und Eigenschaften von VSProject2 gelten ebenfalls für Visual C#- und Visual Basic-Projekte. Die einzige Ausnahme bildet die Imports-Eigenschaft, die für Visual Basic gilt und Zugriff auf das Imports-Objekt bietet. Weitere Informationen finden Sie unter Gewusst wie: Bearbeiten der Imports-Eigenschaft von Visual Basic-Projekten. Die Events-Eigenschaft ermöglicht den Zugriff auf projektspezifische Ereignisse, z. B. VSLangProjWebReferencesEvents und ReferencesEvents. Ereignisbehandlungsaufgaben werden in anderen Themen beschrieben. Weitere Informationen finden Sie unter Reagieren auf Ereignisse (Visual Basic- und Visual C#-Projekte).

In den nachfolgenden Schritten wird veranschaulicht, wie Sie mithilfe des allgemeinen Automatisierungsmodells programmgesteuert eine Visual C#-Windows-Anwendung erstellen können. Mit den Methoden und Eigenschaften von VSProject2 kann das erstellte Projekt programmgesteuert gesteuert werden.

Hinweis

Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in den folgenden Anweisungen aufgeführten.Die Elemente werden durch die verwendete Ausgabe von Visual Studio und die gewählten Einstellungen bestimmt.Weitere Informationen finden Sie unter Anpassen der Entwicklungseinstellungen in Visual Studio.

So steuern Sie mithilfe des VSProject2-Objekts C#-Projekte

  1. Erstellen Sie in Visual C# ein Visual Studio-Add-In-Projekt.

  2. Klicken Sie im Menü Projekt auf Verweis hinzufügen, klicken Sie auf die Registerkarte .NET, wählen Sie VSLangProj, VSLangProj2, VSLangProj80, VSLangProj90 und VSLangProj100 aus, und klicken Sie dann auf OK.

  3. Erstellen Sie zwei Ordner auf dem Computer:

    • <Installation Root>\UserFiles\MyProjects\MyTestProject.

    • <Installation Root>\UserFiles\MyKeyFiles.

      In diesem Beispiel ist das <Installation Root> "C:".

  4. Fügen Sie am Anfang der Datei Connect.cs die folgenden using-Anweisungen ein.

    using VSLangProj;
    using VSLangProj2;
    using VSLangProj80;
    using VSLangProj90;
    
  5. using VSLangProj100; Fügen Sie der OnConnection-Methode folgenden Methodenaufruf hinzu.

    public void OnConnection(object application, 
    ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        CSVSProj2Manip(_applicationObject);
    }
    
  6. Fügen Sie die CSVSProj2Manip-Methodendeklaration direkt unter der OnConnection-Methode hinzu.

    public void CSVSProj2Manip(DTE2 dte)
    {
    }
    
  7. Fügen Sie am Anfang der Methode die folgenden Deklarationen hinzu.

    Solution2 soln = (Solution2)_applicationObject.Solution;
    String csTemplatePath;
    String csPrjPath;
    Project proj;
    VSProject2 vsproj;
    String webServiceRef;
    BuildManager bldMgr;
    
  8. Erstellen Sie mithilfe von AddFromTemplate ein Visual C#-Projekt.

    • Die Syntax zum Abrufen der Vorlagen lautet EnvDTE80.Solution2.GetProjectTemplate("WindowsApplication.zip", "CSharp"), wobei der Name " WindowsApplication.zip " aus der Datei WindowsApplication.zip abgerufen wird, die sich im Ordner <Installation Root>\Programme\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033 befindet. Diese Dateien befinden sich für alle Visual Studio-Projekttypen im Ordner <Installation Root>\Programme\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\Language. "CSharp" gibt an, dass es sich bei dem Projekt um ein Visual C#-Projekt handelt.

    • Die Syntax für ein Visual Basic-Windows-Anwendungsprojekt lautet folgendermaßen: EnvDTE80.Solution2.GetProjectTemplate("WindowsApplication.zip", "VisualBasic"). Die Vorlagen für die Datei WindowsApplication.zip für Visual Basic-Projekte befinden sich im Ordner <Installation Root>\Programme\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\VisualBasic\Windows\1033.

    // Make sure you create the folders that 
    // make up the file path
    // on your computer. You can replace 
    // this with your own file path.
    csPrjPath = "C:\\UserFiles\\MyProjects\\MyTestProject";
    // Get the project template path for a C# windows 
    // application.
    csTemplatePath = soln.GetProjectTemplate 
    ("WindowsApplication.zip", "CSharp");
    // Create a new windows application by using the 
    // template obtained above.
    soln.AddFromTemplate(csTemplatePath, csPrjPath,
     "Test2CSProj", false);
    
  9. Fügen Sie den folgenden Code hinzu, um die Verwendung der VSProject2-Methoden zu veranschaulichen.

    Um dem Projekt programmgesteuert einen Webdienst hinzuzufügen, ersetzen Sie den Platzhaltertext im Code, <web service>, durch die URL eines wirklichen Webdienstes. Um nach einer Webdienst-URL zu suchen, öffnen Sie in der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) von Visual Studio ein Projekt. Klicken Sie im Menü Projekt auf Verweis hinzufügen. Klicken Sie im Dialogfeld Verweis hinzufügen auf den Link UDDI-Verzeichnis, und suchen Sie in diesem Verzeichnis nach einem Webdienst.

    proj = soln.Projects.Item(1);
    // Cast the project as a VSProject2 object.
    vsproj = (VSProject2)proj.Object;
    // Add a reference to System.Security.dll.
    MessageBox.Show("Adding a reference 
    to System.Security.dll");
    // Remove the <version number> in the following path
    // and replace it with one of the version 
    // number folders that appear 
    // in <installation root>\WINDOWS\Microsoft.NET\Framework
    // folder
    vsproj.References.Add
    ("C:\\WINDOWS\\Microsoft.NET\\Framework\\<version number>\\System.Security.dll");
    // Create a Web references folder.
    MessageBox.Show("Creating a Web references folder.");
    vsproj.CreateWebReferencesFolder();
    // Add a Web reference to the folder.
    MessageBox.Show("Adding a Web reference.");
    // Replace the placeholder, <web service>, with a
    // Web service URL.
    webServiceRef = "<web service>";
    vsproj.AddWebReference(webServiceRef);
    bldMgr = vsproj.BuildManager;
    Array monikers = null;
    // String moniker = null;
    String msg = null;
    Object obj = bldMgr.DesignTimeOutputMonikers;
    if (obj != null)
    {
        try
        {
            monikers = (System.Array)obj;
            foreach(String tempmoniker in monikers)
            {
                msg += bldMgr.BuildDesignTimeOutput
    (tempmoniker) + "\n";
            }
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        MessageBox.Show("The build design-time output is:" 
    + "\n"  + msg);
    }
    // Change the MyHTML file name by using GetUniqueFilename.
    MessageBox.Show("Adding an HTML page named 'MyHTML'...");
    String itemTemplatePath = soln.GetProjectItemTemplate("HTMLPage",
     "CSharp");
    proj.ProjectItems.AddFromTemplate
    (itemTemplatePath, "MyHtml");
    MessageBox.Show("Renaming MyHtml' to 'MyTesthtml.htm'...");
    vsproj.Project.ProjectItems.Item("MyHtml").Name =
     vsproj.GetUniqueFilename(proj, "MyTesthtml", "htm");
    // Generate a key-pair file.
    MessageBox.Show("Generating a key-file...");
    vsproj.GenerateKeyPairFiles("C:\\UserFiles\\MyKeyFiles
    \\MyKeyText2.bin", "0");
    

    Die CSVSProj2Manip-Methode verwendet das VSProject2-Objekt zum Ausführen der folgenden Aufgaben:

    • Hinzufügen eines Verweises auf die Datei System.Security.dll mithilfe von References.

    • Erstellen eines Ordners für Webverweise mithilfe von CreateWebReferencesFolder.

    • Hinzufügen eines Webverweises mithilfe von AddWebReference.

    • Anzeigen der Moniker für die Buildentwurfszeit mithilfe von über die BuildManager-Eigenschaft abgerufenen Methoden.

    • Umbenennen eines neuen Projektelements mithilfe der GetUniqueFilename-Methode. Die CSVSProj2Manip-Methode fügt das Projektelement mithilfe von AddFromTemplate hinzu.

    • Generieren einer Schlüsselpaardatei mithilfe der GenerateKeyPairFiles-Methode.

    Im Beispielabschnitt wird der vollständige Code einschließlich eines try-catch-Blocks für die gesamte Methode aufgelistet.

  10. Um das Add-In zu erstellen, klicken Sie im Menü Erstellen auf Projektmappe erstellen.

  11. Öffnen Sie in der Visual Studio-IDE ein Visual C#-Projekt.

  12. 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.

  13. Zeigen Sie die Schlüsselpaardatei an, die Sie im Ordner <Installation Root>\UserFiles\MyKeyFiles mithilfe von Sn.exe (Strong Name-Tool) generiert haben.

Beispiel

Das folgende Beispiel stellt ein einfaches Visual Studio-Add-In dar, mit dem ein Visual C#-Projekt erstellt und mithilfe der Eigenschaften und Methoden des VSProject2-Objekts geändert wird.

using System;
using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using System.Windows.Forms;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
using VSLangProj90;
using VSLangProj100;
public void OnConnection(object application, 
ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    CSVSProj2Manip(_applicationObject);
}
public void CSVSProj2Manip(DTE2 dte)
{
    try
    {
        Solution2 soln = (Solution2)_applicationObject.Solution;
        String csTemplatePath;
        String csPrjPath;
        Project proj;
        VSProject2 vsproj;
        String webServiceRef;
        BuildManager bldMgr;
        // Make sure you create the folders that make up the file path
        // on your computer.
        // You can replace this with your own file path.
        csPrjPath = "C:\\UserFiles\\MyProjects\\MyTestProject";
        // Get the project template path for a C# windows application.
        csTemplatePath = soln.GetProjectTemplate
("WindowsApplication.zip", "CSharp");
        // Create a new Windows application by using the template 
        // obtained above.
        soln.AddFromTemplate(csTemplatePath, csPrjPath,
 "Test2CSProj", false);
        proj = soln.Projects.Item(1);
        // Get a reference to the VSProject2 object.
        vsproj = (VSProject2)proj.Object;
        // Add a reference to System.Security.dll.
        MessageBox.Show("Adding a reference to System.Security.dll");
        // Remove the <version number> in the following path
        // and replace it with one of the version 
        // number folders that appear 
        // in <installation root>\WINDOWS\Microsoft.NET\Framework
        // folder
        vsproj.References.Add
("C:\\WINDOWS\\Microsoft.NET\\Framework\\<version number>\\System.Security.dll");
        // Create a Web references folder.
        MessageBox.Show("Creating a Web references folder.");
        vsproj.CreateWebReferencesFolder();
        // Replace the placeholder, <web service>, with a
        // Web service URL.
        MessageBox.Show("Adding a Web reference.");
        // Replace the placeholder, <web service>, with a
        // Web service URL.
        webServiceRef = "<web service>";
        vsproj.AddWebReference(webServiceRef);
        bldMgr = vsproj.BuildManager;
        Array monikers = null;
        // String moniker = null;
        String msg = null;
        Object obj = bldMgr.DesignTimeOutputMonikers;
        if (obj != null)
        {
            try
            {
                monikers = (System.Array)obj;
                foreach(String tempmoniker in monikers)
                {
                    msg += bldMgr.BuildDesignTimeOutput(tempmoniker) 
+ "\n";
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            MessageBox.Show("The build design-time output is:" + "\n"  
+ msg);
        }
        // Change the MyHTML file name by using GetUniqueFilename.
        MessageBox.Show("Adding an HTML page named 'MyHTML'...");
        String itemTemplatePath =
 soln.GetProjectItemTemplate("HTMLPage", "CSharp");
        proj.ProjectItems.AddFromTemplate(itemTemplatePath, "MyHtml");
        MessageBox.Show("Renaming MyHtml' to 'MyTesthtml.htm'...");
        vsproj.Project.ProjectItems.Item("MyHtml").Name =
 vsproj.GetUniqueFilename(proj, "MyTesthtml", "htm");
        // Generate a key-pair file.
        MessageBox.Show("Generating a key-file...");
        vsproj.GenerateKeyPairFiles
("C:\\UserFiles\\MyKeyFiles\\MyKeyText2.bin", "0");
    }
    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
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)
    CSVSProj2Manip(_applicationObject)
End Sub
Sub CSVSProj2Manip(ByVal dte As DTE2)
    Try
        Dim soln As Solution2 = CType(_applicationObject.Solution, _
         Solution2)
        Dim csTemplatePath As String
        Dim csPrjPath As String
        Dim proj As Project
        Dim vsproj As VSProject2
        Dim webServiceRef As String
        Dim bldMgr As BuildManager
        ' Create this or your own file path on your computer.
        ' The file path must exist before you run this add-in.
        csPrjPath = "C:\UserFiles\MyProjects\MyTestProject"
        ' Get the project template path for a C# windows application.
        csTemplatePath = soln.GetProjectTemplate _
        ("WindowsApplication.zip","CSharp")
        ' Create a new Windows Application
        ' using the template obtained above.
        soln.AddFromTemplate(csTemplatePath, csPrjPath _
        , "Test2CSProj", False)
        proj = soln.Projects.Item(1)
        ' Cast the project to a VSProject2.
        vsproj = CType(proj.Object, VSProject2)
        ' Add a reference to System.Security.dll.
        MsgBox("Adding a reference to System.Security.dll")
        ' Remove the <version number> in the following path
        ' and replace it with one of the version 
        ' number folders that appear 
        ' in <installation root>\WINDOWS\Microsoft.NET\Framework
        ' folder
        vsproj.References.Add _
        ("C:\WINDOWS\Microsoft.NET\Framework\<version number>\System.Security.dll")
        ' Create a Web references folder.
        MsgBox("Creating a Web references folder.")
        vsproj.CreateWebReferencesFolder()
        ' Replace the placeholder, <web service>, with a
        ' web service URL.
        webServiceRef = "<web service>"
        MsgBox("Adding a Web reference.")
        vsproj.AddWebReference(webServiceRef)
        bldMgr = vsproj.BuildManager
        Dim monikers As String() = Nothing
        Dim moniker As String = Nothing
        Dim msg As String = ""
        Dim obj As Object = bldMgr.DesignTimeOutputMonikers
        If Not obj Is Nothing Then
            Try
                monikers = CType(obj, String())
                For Each moniker In monikers
                    msg &= bldMgr.BuildDesignTimeOutput(moniker) + vbCr
                Next
            Catch ex As System.Exception
                MsgBox(ex.ToString)
            End Try
            MsgBox("The build design-time output is:" + vbCr + msg)
        End If
        ' Use the UniqueFilename to rename a new project item.
        MsgBox("Adding an HTML page called 'MyHTML'...")
        Dim itemTemplatePath As String = _
        soln.GetProjectItemTemplate("HTMLPage", "CSharp")
        proj.ProjectItems.AddFromTemplate(itemTemplatePath, "MyHtml")
        MsgBox("Renaming MyHtml' to 'MyTesthtml.htm'...")
        vsproj.Project.ProjectItems.Item("MyHtml").Name = _
        vsproj.GetUniqueFilename(proj, "MyTesthtml", "htm")
        ' Generate a key-pair file.
        vsproj.GenerateKeyPairFiles _
        ("C:\UserFiles\MyKeyFiles\MyKeyText2.bin", "0")
    Catch ex As System.Exception
        MsgBox(ex.ToString)
    End Try
End Sub

Kompilieren des Codes

Um diesen 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.

Siehe auch

Konzepte

Einführung in das VSProject2-Objekt

Weitere Ressourcen

Erweitern von Visual Basic- und Visual C#-Projekten