Porady: manipulowanie projektami Visual Basic oraz C# za pomocą obiektu VSProject2
Interfejs VSProject2 umożliwia dostęp do metod i właściwości, które są specyficzne dla projektów Visual C# i Visual Basic.VSProject2 umożliwia również dostęp do obiektów DTE i Project ogólnego modelu środowiska dzięki właściwościom DTE i Project.
Większość metod i właściwości interfejsu VSProject2 stosuje się jednakowo do projektów w językach Visual C# i Visual Basic.Jedynym wyjątkiem jest właściwość Imports, która ma zastosowanie do Visual Basic i zapewnia dostęp do obiektu Imports.Aby uzyskać więcej informacji, zobacz Porady: manipulowanie importowaniem właściwości projektów Visual Basic.Właściwość Events daje dostęp do zdarzeń związanych z projektem, takich jak VSLangProjWebReferencesEvents i ReferencesEvents.W innych tematach omówiono zadania obsługi zdarzeń.Aby uzyskać więcej informacji, zobacz Odpowiadanie na zdarzenia (projekty Visual Basic oraz Visual C#).
Poniższe kroki pokazują jak programowo utworzyć aplikację okien Visual C# przy użyciu modelu automatyzacji ogólnej.Metody i właściwości VSProject2 są używane, aby programistycznie sterować utworzonym projektem.
[!UWAGA]
Komputer może polazać inne nazwy lub lokalizacje dla niektórych elementów interfejsu użytkownika Visual Studio w dalszych instrukcjach.Te elementy są determinowane przez numer edycji Twojego programu Visual Studio oraz Twoje ustawienia.Aby uzyskać więcej informacji, zobacz Dostosowywanie ustawień środowiska deweloperskiego w Visual Studio.
Aby użyć obiektu VSProject2 do kontrolowania projektów C#
Utwórz projekt dodatku Visual Studio korzystając z Visual C#.
W menu Projekt kliknij polecenie Dodaj odwołanie, kliknij kartę .NET, zaznacz pozycje VSLangProj, VSLangProj2, VSLangProj80, VSLangProj90 i VSLangProj100, a następnie kliknij przycisk OK.
Utwórz dwa foldery na komputerze:
<Installation Root>\UserFiles\MyProjects\MyTestProject.
<Installation Root>\UserFiles\MyKeyFiles.
W tym przykładzie <Installation Root> to „C:”.
Dodaj następujące za pomocą instrukcji na górze pliku Connect.cs.
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90;
Korzystając z VSLangProj100;Dodaj poniższe wywołanie metody do metody OnConnection.
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; CSVSProj2Manip(_applicationObject); }
Dodaj deklarację metody CSVSProj2Manip bezpośrednio poniżej metody OnConnection.
public void CSVSProj2Manip(DTE2 dte) { }
Dodaj następujące deklaracje na górze metody.
Solution2 soln = (Solution2)_applicationObject.Solution; String csTemplatePath; String csPrjPath; Project proj; VSProject2 vsproj; String webServiceRef; BuildManager bldMgr;
Użyj AddFromTemplate, aby utworzyć projekt Visual C#.
Składnia uzyskania szablonów jest EnvDTE80.Solution2.GetProjectTemplate("WindowsApplication.zip", "CSharp"), gdzie nazwa " WindowsApplication.zip " jest uzyskiwana z pliku WindowsApplication.zip znajdującego się w folderze <Installation Root>\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033.Dla wszystkich typów projektów programu Visual Studio te pliki znajdują się w folderze <Installation Root>\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\Language."CSharp" określa, że dany projekt jest projektem Visual C#.
Dla projektu aplikacji systemu Windows w języku Visual Basic składnią jest EnvDTE80.Solution2.GetProjectTemplate("WindowsApplication.zip", "VisualBasic").Dla projektów w języku Visual Basic szablony plików zip aplikacji systemu Windows znajdują się w folderze <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);
Dodaj następujący kod w celu zademonstrowania działania metod VSProject2.
Aby programowo dodać usługę sieci Web do projektu, należy zastąpić tekst symbolu zastępczego, <web service>, w kodzie adresem URL rzeczywistej usługi sieci Web.Aby odszukać adres URL usługi sieci Web, otwórz projekt w zintegrowanym środowisku programistycznym (IDE) Visual Studio.W menu Projekt kliknij opcję Dodaj odwołanie.W oknie dialogowym Dodaj odwołanie kliknij łącze Katalog UDDI i za pomocą katalogu znajdź usługę sieci Web.
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 używa obiekty VSProject2 do:
Dodaj odwołanie do System.Security.dll za pomocą References.
Utwórz folder odwołania sieci Web za pomocą CreateWebReferencesFolder.
Dodaj odwołanie sieci Web za pomocą AddWebReference.
Wyświetl monikery projektowania kompilacji przy użyciu metod uzyskanych przez właściwość BuildManager.
Zmień nowy element projektu za pomocą metody GetUniqueFilename.Metoda CSVSProj2Manip dodaje element projektu za pomocą AddFromTemplate.
Generowanie pliku pary kluczy za pomocą metody GenerateKeyPairFiles.
Sekcja przykład wymienia kompletny kod włącznie z blokiem try-catch dla całej metody.
Aby utworzyć dodatek, kliknij Kompiluj rozwiązanie w menu Kompilacja.
Otwórz projekt Visual C# w IDE Visual Studio.
W menu Narzędzia, kliknij Menedżer dodatkówi wybierz swój dodatek z okna dialogowego Menedżer dodatków.Kliknij OK, aby uruchomić dodatek.
Wyświetl plik klucz-para, który wygenerowałeś w folderze <Installation Root>\UserFiles\MyKeyFiles za pomocą Sn.exe (Narzędzie silnych nazw).
Przykład
Poniższy przykład to podstawowy dodatek Visual Studio, który tworzy projekt Visual C# i obsługuje go przy użyciu właściwości i metody obiektu 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
Kompilowanie kodu
Aby skompilować ten kod, utwórz nowy projekt dodatku Visual Studio i zastąp kod metody OnConnection kodem w przykładzie.Aby uzyskać informacje na temat uruchamiania dodatku, zobacz Porady: kontrolowanie dodatków za pomocą menedżera dodatków.
Zobacz też
Koncepcje
Wprowadzenie do obiektu VSProject2