How to: Manipular Visual Basic e C# projetos usando o objeto VSProject2
O VSProject2 interface fornece acesso a métodos e propriedades que são específicas para Visual C# e Visual Basic projetos. VSProject2também fornece acesso ao DTE e Project objetos do modelo geral do ambiente por meio de DTE e Project Propriedades.
A maioria dos métodos e propriedades do VSProject2 Aplicar uniformemente a Visual C# e Visual Basic projetos. A única exceção é o Imports propriedade, que se aplica a Visual Basic e fornece acesso para o Imports objeto. Para obter mais informações, consulte How to: Manipular a propriedade de importações de projetos de Visual Basic. O Events propriedade dá acesso a eventos específicos do projeto, tais como VSLangProjWebReferencesEvents e ReferencesEvents. As tarefas de manipulação de eventos são abordadas em outros tópicos. Para obter mais informações, consulte Respondendo a eventos (Visual Basic e projetos do Visual C#).
As etapas a seguir ilustram como criar programaticamente um Visual C# o aplicativo do windows usando o modelo de automação geral. Os métodos e propriedades de VSProject2 são usados para controlar programaticamente o projeto criado.
Observação |
---|
As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritos na Ajuda, dependendo das configurações ativas ou configurações de edição. Esses procedimentos foram desenvolvidos com o General Development Settings ativo. Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu. Para obter mais informações, consulte Trabalhando com configurações. |
Para usar o objeto VSProject2 projetos de controle C#
Criar um Visual Studio projeto usando o Add-in Visual C#.
Sobre o projeto menu, clique em Add Reference, clique o .NET guia, selecione o VSLangProj, VSLangProj2, VSLangProj80, VSLangProj90 e VSLangProj100 e, em seguida, clique em OK.
Crie duas pastas em seu computador:
< raiz da instalação >\UserFiles\MyProjects\MyTestProject.
< raiz da instalação >\UserFiles\MyKeyFiles.
Neste exemplo, o <Raiz de instalação> é o "C:".
Adicione as seguintes instruções using ao início do arquivo Connect. cs.
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90;
usando o VSLangProj100;Adicione a seguinte chamada de método para o método OnConnection.
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; CSVSProj2Manip(_applicationObject); }
Adicione a declaração de método de CSVSProj2Manip diretamente abaixo o método OnConnection.
public void CSVSProj2Manip(DTE2 dte) { }
Adicione as seguintes declarações na parte superior do método.
Solution2 soln = (Solution2)_applicationObject.Solution; String csTemplatePath; String csPrjPath; Project proj; VSProject2 vsproj; String webServiceRef; BuildManager bldMgr;
Use AddFromTemplate para criar um Visual C# project.
A sintaxe para obter os modelos é EnvDTE80.Solution2.GetProjectTemplate("WindowsApplication.zip", "CSharp"), onde o nome " WindowsApplication.zip " é obtido a partir de WindowsApplication.zip arquivo localizado na < raiz da instalação >pasta \Arquivos de Programas\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033. Para todas as Visual Studio esses arquivos podem ser encontrados de tipos de projeto de < raiz da instalação >\Arquivos de Programas\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\idioma pasta. "CSharp"Especifica que este projeto é um Visual C# project.
Para um Visual Basic o projeto de aplicativo do Windows, a sintaxe é EnvDTE80.Solution2.GetProjectTemplate("WindowsApplication.zip", "VisualBasic"). Para Visual Basic projetos para os modelos de arquivo de zip de aplicativo do Windows são encontrados na < raiz da instalação >\ pasta de 8\Common7\IDE\ProjectTemplates\VisualBasic\Windows\1033 de Visual Studio de Programas\Microsoft do programa.
// 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);
Adicione o seguinte código para demonstrar o uso de VSProject2 métodos.
Para adicionar programaticamente um serviço da Web ao projeto, você deve substituir o texto de espaço reservado, <web service>, no código com a URL de um Web service. Para localizar o URL de um serviço da Web, abra um projeto na Visual Studio o ambiente de desenvolvimento integrado (IDE). Sobre o projeto menu clique Add Web Reference. No Add Reference caixa de diálogo, clique no Diretório UDDI link e, em seguida, use o diretório para localizar um serviço da 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");
O método CSVSProj2Manip usa o VSProject2 o objeto para:
Adicionar uma referência a System.Security.dll usando References.
Criar uma pasta de referências da Web usando CreateWebReferencesFolder.
Adicionar uma referência da Web usando AddWebReference.
Exibir os identificadores de tempo de design de compilação usando métodos obtidos por meio de BuildManager propriedade.
Renomear um novo item de projeto usando o GetUniqueFilename método. O método CSVSProj2Manip adiciona o item de projeto usando AddFromTemplate.
Gerar um arquivo par de chaves usando o GenerateKeyPairFiles método.
A seção exemplo lista o código completo, incluindo um bloco try-catch para o método inteiro.
Para criar o suplemento, clique em Build Solution sobre o Build menu.
Abrir um Visual C# projeto na Visual Studio IDE.
No Ferramentas menu, clique em Gerenciador de suplementose selecione o add-in da Gerenciador de suplementos caixa de diálogo. Clique em OK para executar seu suplemento.
Exibir o arquivo par de chaves geradas no < raiz da instalação >\UserFiles\MyKeyFiles a pasta usando o Sn. exe (ferramenta de nome forte).
Exemplo
O exemplo a seguir é um basic Visual Studio suplemento cria um Visual C# de projeto e o manipula usando as propriedades e métodos da VSProject2 objeto.
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
Compilando o código
Para compilar esse código, crie um novo Visual Studio Add-in do projeto e substitua o código do método OnConnection com o código de exemplo. Para obter informações sobre como executar um suplemento, consulte Como: controle de Adicionar-</c0>.
Consulte também
Conceitos
Introdução ao objeto VSProject2