Partilhar via


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

  1. Criar um Visual Studio Projeto suplemento usando Visual C#.

  2. Sobre o Projeto menu, clicar Adicionar referência, clicar no NET guia, selecionar VSLangProj VSLangProj2 e VSLangProj80 e clicar OK.

  3. 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);
    }
    
  4. Adicionar o AddAClass método diretamente abaixo de OnConnection método.

    public void AddAClass(DTE2 dte)
    {
    }
    
  5. 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

Conceitos

Visão geral sobre o objeto CodeModel para Visual Basic e translation from VPE for Csharp Applications

Descobrir o código usando o modelo de código (Visual Basic)

Descobrir o código usando o modelo de código (Visual C#)