Como: Criar uma classe translation from VPE for Csharp usando o objeto CodeModel
The CodeModel2 hierarquia de objetos tem um conjunto completo de métodos para gerar código automaticamente. Embora você normalmente digitaria o código manualmente, há situações em que você pode querer automatizar algumas do processo.Automação permite que você:
Aplica as convenções de nomeação.
Aplicar padrões de documentação.
Crie projetos padronizados.
Este procedimento supõe que você sabe como criar um projeto suplemento.Para obter mais informações, consulte Criando Adicionar-ins e assistentes.
A classe no procedimento a seguir irá ser contida em um novo arquivo de fonte.Mais tarde um método é adicionado à classe.
Observação: |
---|
As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritas na Ajuda, dependendo das configurações ativas ou configurações de edição.Esses procedimentos foram dev eloped com o Geral Development Settings ativo.Para alterar as configurações, escolher Importar e exportar configurações on the Ferramentas menu.Para obter mais informações, consulte Configurações do Visual Studio. |
Para adicionar um novo arquivo de fonte para o projeto
Criar um Visual Studio Projeto suplemento usando Visual C#.
Sobre o Projeto menu, clicar Adicionar referência, clicar no NET guia, selecionar VSLangProj VSLangProj2 e VSLangProj80 e clicar OK.
Adicione a seguinte telefonar de método para o OnConnection método.
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; // Call the AddClass method. AddAClass(_applicationObject); }
Adicionar o AddAClass método diretamente abaixo de OnConnection método.
public void AddAClass(DTE2 dte) { }
Adicione o seguinte código à AddAClass método para adicionar um arquivo de código nova e vazia para o projeto.
O modelo CodeFile é instalado com Visual Studio e pode ser localizada usando o GetProjectItemTemplate método. O método aceita dois parâmetros, os modelos de linguagem que você está pesquisando e o nome de arquivo para o item de projeto resultante.O item de projeto é criado usando o AddFromTemplate método.
O código, proj = soln.Projects.Item(1);, necessita que um Visual C# solução está aberta em Visual Studio ambiente de desenvolvimento integrado (IDE) antes de executar este exemplo.
Project proj; String csItemTemplatePath; Solution2 soln; soln = (Solution2)_applicationObject.Solution; // Open a C# solution in the Visual Studio IDE // before running this add-in. proj = soln.Projects.Item(1); ProjectItem pi; csItemTemplatePath = soln.GetProjectItemTemplate("CodeFile", "CSharp"); proj.ProjectItems.AddFromTemplate(csItemTemplatePath, "MyFile.cs"); pi = proj.ProjectItems.Item("MyFile.cs");
Para adicionar um espaço para nome o arquivo de fonte
Adicione o seguinte código para adicionar um espaço para nome o arquivo de fonte.
The FileCodeModel propriedade contém uma referência para o FileCodeModel2 objeto que representa todos os elementos de código no arquivo. The FileCodeModel2 objeto fornece vários métodos para adicionar elementos de código para o arquivo de fonte. The AddNamespace método retorna um CodeNamespace objeto. Você usará este CodeNamespace referência para adicionar uma definição de classe no código-fonte.
FileCodeModel2 fcm = (FileCodeModel2)pi.FileCodeModel; CodeNamespace games;
Para adicionar a classe para o namespace
Use o AddClass Para adicionar um Chess classe para o Games espaço para nome. The AddClass método retorna uma referência a um CodeClass ocorrência, que você pode usar para adicionar propriedades e métodos à classe.
games = fcm.AddNamespace("Games", -1); CodeClass2 chess;
Para definir um método
Use o AddFunction Para adicionar um Move método para o Chess classe. O primeiro argumento para o método Especifica o nome da função criada.O segundo argumento determina o tipo de função criado, como operadores e construtores também são adicionadas usando o AddFunction método. O terceiro argumento especifica o tipo de retorno da função e é substituído exatamente na assinatura do método.
if (games != null) { // Add a class to the namespace. chess = (CodeClass2)games.AddClass("Chess", -1, null, null, vsCMAccess.vsCMAccessDefault); // Add a method with a parameter to the class. CodeFunction2 move; move = (CodeFunction2)chess.AddFunction("Move", vsCMFunction.vsCMFunctionFunction, "int", -1, vsCMAccess.vsCMAccessDefault, null); move.AddParameter("IsOK", "bool", -1); }
O arquivo de fonte produzido por esses procedimentos é mostrado abaixo.
namespace Games { class Chess { int Move(bool IsOK) { return default(int); } } }
O código de suplemento é mostrado abaixo.
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; // Call the AddClass method. AddAClass(_applicationObject); } public void AddAClass(DTE2 dte) { Project proj; String csItemTemplatePath; Solution2 soln; soln = (Solution2)_applicationObject.Solution; // Open a C# solution in the Visual Studio IDE // before running this add-in. proj = soln.Projects.Item(1); ProjectItem pi; csItemTemplatePath = soln.GetProjectItemTemplate("CodeFile", "CSharp"); proj.ProjectItems.AddFromTemplate(csItemTemplatePath, "MyFile.cs"); pi = proj.ProjectItems.Item("MyFile.cs"); FileCodeModel2 fcm = (FileCodeModel2)pi.FileCodeModel; CodeNamespace games; try { // Add a namespace. games = fcm.AddNamespace("Games", -1); CodeClass2 chess; if (games != null) { // Add a class to the namespace. chess = (CodeClass2)games.AddClass("Chess", -1, null, null, vsCMAccess.vsCMAccessDefault); // Add a method with a parameter to the class. CodeFunction2 move; move = (CodeFunction2)chess.AddFunction("Move", vsCMFunction.vsCMFunctionFunction, "int", -1, vsCMAccess.vsCMAccessDefault, null); move.AddParameter("IsOK", "bool", -1); } } catch (Exception ex) { MessageBox.Show("Failed to add a code model element, because " + ex.Message); } }
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) AddAClass(_applicationObject) End Sub Public Sub AddAClass(ByVal dte As DTE2) Dim proj As Project Dim csItemTemplatePath As String Dim soln As Solution2 soln = CType(_applicationObject.Solution, Solution2) ' Open a C# solution in the Visual Studio IDE before ' running this add-in. proj = soln.Projects.Item(1) Dim pi As ProjectItem csItemTemplatePath = soln.GetProjectItemTemplate("CodeFile", "CSharp") proj.ProjectItems.AddFromTemplate(csItemTemplatePath, "MyFile34.cs") pi = proj.ProjectItems.Item("MyFile34.cs") Dim fcm As FileCodeModel2 = CType(pi.FileCodeModel, FileCodeModel2) Dim games As CodeNamespace Try ' Add a namespace. games = fcm.AddNamespace("Games") Dim chess As CodeClass2 If Not games Is Nothing Then ' Add a class to the namespace. chess = CType(games.AddClass("Chess"), CodeClass2) ' Add a method with a parameter to the class. Dim move As CodeFunction2 move = CType(chess.AddFunction("Move", vsCMFunction.vsCMFunctionFunction, _ "int"), CodeFunction2) move.AddParameter("IsOK", "bool") End If Catch e As Exception MsgBox("Failed to add a code model element, because " & _ e.ToString()) End Try End Sub
Substitua o código na classe OnConnection com o código de exemplo acima.Para obter informações adicionais sobre como executar esse exemplo, consulte Como: Controlarar Adicionar-ins com o Adicionar - in Gerente.
Consulte também
Tarefas
Como: Use o objeto CodeModel para analisar o código do Visual Basic