Jak: manipulovat projekty C# a Visual Basic pomocí objektu VSProject2
VSProject2 Rozhraní poskytuje přístup k metodám a vlastnostem, které jsou specifické pro Visual C# a Visual Basic projekty.VSProject2také poskytuje přístup k DTE a Project objekty modelu životního prostředí prostřednictvím DTE a Project vlastnosti.
Většina metod a vlastností VSProject2 platí jednotně na Visual C# a Visual Basic projekty.Jedinou výjimkou je Imports vlastnost, která se vztahuje na Visual Basic a poskytuje přístup k Imports objektu.Další informace naleznete v tématu Jak: manipulovat s dovozy vlastnost projekty jazyka Visual Basic.Events Vlastnost poskytuje přístup k projektu specifické události, jako například VSLangProjWebReferencesEvents a ReferencesEvents.Úlohy zpracování událostí jsou zahrnuty další témata.Další informace naleznete v tématu Reakce na události (Visual Basic a Visual C# projekty).
Následující kroky ukazují, jak programově vytvářet Visual C# aplikace systému windows pomocí obecné automatizace modelu.Metody a vlastnosti VSProject2 slouží k programovému řízení vytvořený projekt.
[!POZNÁMKA]
Dialogová okna a příkazy v nabídkách menu, které vidíte, se mohou lišit od těch popsaných v nápovědě, v závislosti na vašich aktivních nastaveních nebo edici.Tyto postupy byly vyvinuty s aktivní Obecné nastavení pro vývoj.Chcete-li změnit nastavení, zvolte Import and Export Settings v menu Nástroje.Další informace naleznete v tématu Nastavení aplikace Visual Studio.
Použití objektu VSProject2 na projekty řízení C#
Vytvoření Visual Studio projektu přidat pomocí Visual C#.
Na projektu nabídky, klepněte na tlačítko Přidat odkaz na, klepněte .NET karta, vyberte VSLangProj, VSLangProj2, VSLangProj80, VSLangProj90 a VSLangProj100 a potom klepněte na tlačítko OK.
Vytvořte dvě složky v počítači:
< kořenový adresář instalace >\UserFiles\MyProjects\MyTestProject.
< kořenový adresář instalace >\UserFiles\MyKeyFiles.
V tomto příkladu <Instalaci kořenového> je "C:".
Přidejte následující pomocí příkazů na začátek souboru Connect.cs.
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90;
pomocí VSLangProj100;Přidáte následující způsob volání metody OnConnection.
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; CSVSProj2Manip(_applicationObject); }
Přidáte deklarace metody CSVSProj2Manip přímo pod metodu OnConnection.
public void CSVSProj2Manip(DTE2 dte) { }
Přidejte následující prohlášení horní metody.
Solution2 soln = (Solution2)_applicationObject.Solution; String csTemplatePath; String csPrjPath; Project proj; VSProject2 vsproj; String webServiceRef; BuildManager bldMgr;
Použití AddFromTemplate k vytvoření Visual C# projektu.
Syntaxe pro získání šablony je EnvDTE80.Solution2.GetProjectTemplate("WindowsApplication.zip", "CSharp"), kde název " WindowsApplication.zip " pochází ze souboru WindowsApplication.zip, který je umístěn v < kořenový adresář instalace >složku \Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033.Pro všechny Visual Studio typy těchto souborů lze nalézt v projektu < kořenový adresář instalace >\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\jazyk složky."CSharp"Určuje, že tento projekt Visual C# projektu.
Pro Visual Basic syntaxe je projekt aplikace systému Windows EnvDTE80.Solution2.GetProjectTemplate("WindowsApplication.zip", "VisualBasic").Pro Visual Basic šablony aplikace systému Windows soubor zip se nacházejí v projektech < kořenový adresář instalace >\ 8\Common7\IDE\ProjectTemplates\VisualBasic\Windows\1033 složka Program Files\Microsoft Visual Studio.
// 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);
Přidejte následující kód prokázat použití VSProject2 metod.
Chcete-li programově přidat webovou službu k projektu, je nutné nahradit zástupný text <web service>, kód s URL aktuální webové služby.Chcete-li vyhledat adresu URL webové služby, otevřete projekt v Visual Studio integrované vývojové prostředí (IDE).Na projektu nabídce klepněte na příkaz Přidat odkaz na Web.Na Přidat odkaz na dialogové okno, klepněte Adresářové služby UDDI propojení a najít webové služby pomocí adresáře.
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");
Používá metodu CSVSProj2Manip VSProject2 k objektu:
Přidat odkaz na System.Security.dll References.
Vytvořit webovou složku odkazy pomocí CreateWebReferencesFolder.
Přidat webový odkaz pomocí AddWebReference.
Zobrazení zástupných názvů sestavení návrhu pomocí metody získané BuildManager vlastnost.
Přejmenovat pomocí nové položky projektu GetUniqueFilename metoda.Metoda CSVSProj2Manip přidá položku projektu pomocí AddFromTemplate.
Generovat soubor dvojice klíčů pomocí GenerateKeyPairFiles metoda.
Části příklad uvádí úplný kód, včetně metody celý blok try-catch.
Chcete-li vytvořit doplněk, klepněte na tlačítko Sestavit řešení na sestavení nabídce.
Otevřít Visual C# v projektu Visual Studio IDE.
Na Nástroje nabídky, klepněte na tlačítko Správce doplňkůa vyberte doplněk z Správce doplňků dialogové okno.Klepněte na tlačítko OK spustit doplněk.
Zobrazit soubor dvojice klíčů generovaných v < kořenový adresář instalace >\UserFiles\MyKeyFiles složky pomocí Sn.exe (nástroj silný název).
Příklad
Následující příklad je základní Visual Studio , který vytvoří Visual C# projektu a manipuluje pomocí vlastnosti a metody VSProject2 objektu.
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
Probíhá kompilace kódu
Tento kód kompilace, vytvořit nový Visual Studio přidat projektu a nahradit kód metody OnConnection s kódem v příkladu.Informace o spuštění v Postup: ovládání doplňky pomocí Správce doplňků.