Postupy: Manipulace s projekty Visual Basic a C# pomocí objektu VSProject2
Rozhraní VSProject2 poskytuje přístup k metodám a vlastnostem, které jsou specifické pro projekty Visual C# a Visual Basic.VSProject2 také poskytuje přístup k objektům DTE a Project modelu obecného prostředí skrze vlastnosti DTE a Project.
Většina metod a vlastností VSProject2 platí jednotně pro projekty Visual C# a Visual Basic.Jedinou výjimkou je vlastnost Imports, která se vztahuje na Visual Basic a poskytuje přístup k objektu Imports.Další informace naleznete v tématu Postupy: Manipulace s vlastností importů v projektech Visual Basic.Vlastnost Events poskytuje přístup k událostem související s projektem, jako je VSLangProjWebReferencesEvents a ReferencesEvents.Úlohy zpracování událostí jsou zahrnuty v dalším tématu.Další informace naleznete v tématu Reagování na události (projekty Visual Basic a Visual C#).
Následující kroky ukazují, jak programově vytvářet aplikaci oken Visual C# pomocí modelu obecné automatizace.Metody a vlastnosti VSProject2 je možné použít k programovému řízení vytvořeného projektu.
[!POZNÁMKA]
Váš počítač může zobrazit jiné názvy nebo umístění pro některé prvky uživatelského rozhraní sady Visual Studio v následujících pokynech.Tyto prvky jsou určeny verzí aplikace Visual Studio a použitým nastavením.Další informace naleznete v tématu Přizpůsobení nastavení pro vývoj v sadě Visual Studio.
Chcete-li použít objekt VSProject2 k řízení projektů C#
Vytvořte projekt doplňku Visual Studio pomocí Visual C#.
V nabídce Projekt klepněte na tlačítko Přidat odkaz, klepněte na kartu .NET, vyberte VSLangProj, VSLangProj2, VSLangProj80, VSLangProj90 a VSLangProj100 a potom klepněte na tlačítko OK.
Vytvořte dvě složky v počítači:
<Installation Root>\UserFiles\MyProjects\MyTestProject.
<Installation Root>\UserFiles\MyKeyFiles.
V tomto příkladě je <Installation Root> "C:".
Na začátek souboru Connect.cs přidejte následující příkazy using.
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90;
pomocí VSLangProj100;přidejte následující volání metodu 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 deklaraci metody CSVSProj2Manip přímo pod metodu OnConnection.
public void CSVSProj2Manip(DTE2 dte) { }
Na začátek metody přidejte následující deklarace.
Solution2 soln = (Solution2)_applicationObject.Solution; String csTemplatePath; String csPrjPath; Project proj; VSProject2 vsproj; String webServiceRef; BuildManager bldMgr;
Použijte AddFromTemplate k vytvoření projektu Visual C#.
Syntaxe pro získání šablon je EnvDTE80.Solution2.GetProjectTemplate("WindowsApplication.zip", "CSharp"), kde je název " WindowsApplication.zip " získán ze souboru WindowsApplication.zip umístěného ve složce <Installation Root>\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033.Pro všechny projekty aplikace Visual Studio tyto soubory naleznete ve složce <Installation Root>\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\Language."CSharp" určuje, že tento projekt je projekt Visual C#.
Pro projekt Visual Basic Aplikace systému Windows je syntaxe EnvDTE80.Solution2.GetProjectTemplate("WindowsApplication.zip", "VisualBasic").Pro projekty Visual Basic, které jsou součástí Aplikace systému Windows soubor zip, jsou soubory zip nalezeny ve složce <Installation Root>\ Program Files\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);
Přidejte následující kód pro demonstraci použití metod VSProject2:
Chcete-li programově přidat odkaz webové služby do projektu, je třeba nahradit zástupný text, <web service> v kódu adresou URL aktuální webové služby.Chcete-li vyhledat adresu URL webové služby, otevřete projekt Visual Studio v integrovaném vývojovém prostředí (IDE).V nabídce Projekt klepněte na příkaz Přidat odkaz.V dialogovém okně Přidat odkaz klepněte na odkaz Adresář UDDI a použijte adresář k nalezení webové služby.
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");
Metoda CSVSProj2Manip používá objekt VSProject2 k následujícím akcím:
Přidat odkaz na System.Security.dll pomocí References.
Vytvořte složku webových odkazů pomocí CreateWebReferencesFolder.
Přidat webový odkaz pomocí AddWebReference.
Zobrazte monikery času sestavení pomocí metod získaných vlastností BuildManager.
Přejmenujte novou položku projektu pomocí metody GetUniqueFilename.Metoda CSVSProj2Manip přidá položky projektu pomocí AddFromTemplate.
Generovat soubor dvojice klíčů s využitím metody GenerateKeyPairFiles.
Vzorový oddíl uvádí kompletní kód včetně bloku příkazu try-catch pro celou metodu.
Pokud chcete sestavit doplněk, klikněte na Sestavit řešení v nabídce Sestavení.
Otevřete projekt Visual C# nebo v IDE Visual Studio.
V nabídce Nástroje klepněte na tlačítko Správce doplňků a vyberte doplněk z dialogového okna Správce doplňků.Klepněte na tlačítko OK a spusťte tak doplněk.
Zobrazte soubor dvojice klíčů, který jste generovali do složky <Installation Root>\UserFiles\MyKeyFiles pomocí Sn.exe (nástroj pro silný název).
Příklad
Následující příklad je základní doplněk Visual Studio, který vytvoří projekt Visual C# a manipuluje s ním pomocí vlastností a metod objektu VSProject2.
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
Chcete-li tento kód zkompilovat, vytvořte nový projekt doplňku Visual Studio a nahraďte kód metody OnConnection kódem v příkladu.Další informace o spuštění doplňku naleznete v části Postupy: Řízení doplňků pomocí Správce doplňků.
Viz také
Koncepty
Představení objektu VSProject2