Jak: manipulować Visual Basic i C# projektów za pomocą obiektu VSProject2
VSProject2 Interfejsu zapewnia dostęp do metod i właściwości, które są specyficzne dla Visual C# i Visual Basic projektów.VSProject2Umożliwia również dostęp do DTE i Project obiekty modelu środowiska poprzez DTE i Project właściwości.
Większość metod i właściwości VSProject2 stosuje się jednakowo do Visual C# i Visual Basic projektów.Jedynym wyjątkiem jest Imports właściwość, która ma zastosowanie do Visual Basic i zapewnia dostęp do Imports obiektu.Aby uzyskać więcej informacji, zobacz Jak: manipulować właściwość przywozu projekty języka Visual Basic.Events Właściwość daje dostęp do zdarzenia specyficzne dla projektu, takie jak VSLangProjWebReferencesEvents i ReferencesEvents.Zadania obsługi zdarzeń są omówione w innych tematów.Aby uzyskać więcej informacji, zobacz Reagowanie na zdarzenia (Visual Basic i Visual C# projektów).
Poniższe kroki ilustrują sposób programowo utworzyć Visual C# aplikacji systemu windows przy użyciu modelu ogólne automatyzacji.Metody i właściwości VSProject2 są używane do programowego sterowania utworzony projekt.
[!UWAGA]
Okien dialogowych i poleceń menu, którą widzisz mogą różnić się od tych opisanych w pomocy, w zależności od tego, aktywne ustawienia lub edition.Procedury te zostały opracowane z ogólnych ustawień rozwoju aktywnych.Aby zmienić ustawienia, wybierz polecenie Importuj i Eksportuj ustawienia na Narzędzia menu.Aby uzyskać więcej informacji, zobacz Visual Studio, ustawienia.
Aby użyć obiektu VSProject2 do kontroli języka C# projektów
Tworzenie Visual Studio -w projekcie przy użyciu Visual C#.
Na Projekt menu, kliknij przycisk Dodaj odwołanie, kliknij przycisk .NET tab, wybierz VSLangProj, VSLangProj2, VSLangProj80, VSLangProj90 i VSLangProj100, a następnie kliknij przycisk OK.
Utwórz dwa foldery na tym komputerze:
< instalacji głównego >\UserFiles\MyProjects\MyTestProject.
< instalacji głównego >\UserFiles\MyKeyFiles.
W tym przykładzie <Główny instalacji> jest "C:".
Dodaje się przy użyciu instrukcji do początku pliku Connect.cs.
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90;
za pomocą 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 deklaracja metody CSVSProj2Manip, bezpośrednio poniżej metoda OnConnection.
public void CSVSProj2Manip(DTE2 dte) { }
Do góry metody, należy dodać następujące deklaracje.
Solution2 soln = (Solution2)_applicationObject.Solution; String csTemplatePath; String csPrjPath; Project proj; VSProject2 vsproj; String webServiceRef; BuildManager bldMgr;
Użyj AddFromTemplate do tworzenia Visual C# projektu.
Składnia dla uzyskania szablonów jest EnvDTE80.Solution2.GetProjectTemplate("WindowsApplication.zip", "CSharp"), gdzie nazwa " WindowsApplication.zip " jest uzyskiwany z pliku WindowsApplication.zip, znajduje się w < instalacji głównego >folderu \Program Files\Microsoft 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033 programu Visual Studio.Dla wszystkich Visual Studio projektu typy te pliki można znaleźć w < instalacji głównego >\Program Files\Microsoft 8\Common7\IDE\ProjectTemplates\ programu Visual Studiojęzyka folder."CSharp"Określa, że dany projekt jest Visual C# projektu.
Dla Visual Basic projekt aplikacji systemu Windows, składnia jest EnvDTE80.Solution2.GetProjectTemplate("WindowsApplication.zip", "VisualBasic").Dla Visual Basic projekty szablonów plik zip aplikacji systemu Windows znajdują się w < instalacji głównego >\ folder 8\Common7\IDE\ProjectTemplates\VisualBasic\Windows\1033 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);
Dodaj następujący kod do wykazania wykorzystanie VSProject2 metody.
Do programowego dodania usługi sieci Web do projektu, należy zastąpić tekst zastępczy <web service>, w kodzie za pomocą adresu URL rzeczywiste usługi sieci Web.Aby odszukać adres URL usługi sieci Web, należy otworzyć projektu w Visual Studio zintegrowane środowisko dewelopowania (IDE).Na Projekt kliknij menu Dodawanie odwołania sieci Web.Na Dodaj odwołanie okno dialogowe, kliknij przycisk UDDI katalogu łącza i znaleźć usługi sieci Web za pomocą katalogu.
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");
W metodzie CSVSProj2Manip VSProject2 sprzeciw w stosunku do:
Dodaj odwołanie do System.Security.dll za pomocą References.
Utwórz folder odwołań w sieci Web za pomocą CreateWebReferencesFolder.
Dodaj odwołanie sieci Web za pomocą AddWebReference.
Wyświetlanie kompilacji monikerów czasie projektowania za pomocą uzyskanej za pomocą metody BuildManager właściwości.
Zmień nazwę nowego elementu projektu za pomocą GetUniqueFilename metody.Metoda CSVSProj2Manip dodaje element projektu za pomocą AddFromTemplate.
Generowanie pliku para kluczy za pomocą GenerateKeyPairFiles metody.
W sekcji przykład wyświetla pełny kod łącznie z bloku try-catch dla całej metody.
Aby zbudować dodatek, kliknij przycisk Roztwór budować na budować menu.
Otwórz Visual C# projektu w Visual Studio IDE.
Na Narzędzia menu, kliknij przycisk - w Menedżerzei wybierz dodatek z - W Menedżerze okno dialogowe.Kliknij przycisk OK do uruchomienia dodatku.
Wyświetl plik para kluczy generowanych w < instalacji głównego >\UserFiles\MyKeyFiles folderu za pomocą SN.exe (silnej nazwy narzędzie).
Przykład
Poniższy przykład stanowi podstawowy Visual Studio dodatek, który tworzy Visual C# projektu i przetwarza go za pomocą właściwości i metody VSProject2 obiektu.
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ć kod, Utwórz nowy Visual Studio -w projekcie i Zastąp kod metody OnConnection z kodem w przykładzie.Aby uzyskać informacje o sposobach uruchamiania dodatku, zobacz Jak: dodatki formantu przy użyciu dodać Menedżera.
Zobacz też
Koncepcje
Wprowadzenie do obiektu VSProject2