VB .NET - O compilador Visual Basic


Neste artigo vou apresentar o compilador Visual Basic escrevendo um pouco sobre suas características e recursos afinal é ele quem faz nossas aplicações Visual Basic serem geradas no formato adequado para execução pela plataforma .NET.

Nota: Na verdade todo programa .NET é compilado sempre duas vezes: a primeira pelo compilador da linguagem (vbc.exe no caso do VB .NET) e a segunda pelo compilador JIT – Just In Time.

Quando a .NET Framework foi introduzida, uma boa novidade para o desenvolvedor Visual Basic foi a inclusão de um compilador de linguagem autônoma. Isso significava que não éramos mais obrigados a ter o Visual Studio para construir aplicações Visual Basic.

Na verdade, você poderia pegar uma versão de avaliação gratuita da NET. Framework do site da Microsoft e construir aplicações Web, classes, módulos, ou também poderia usar um editor de texto (acredite se quiser) como o Notepad e compilar suas aplicações com o compilador Visual Basic.

O compilador Visual Basic está incluído junto com a instalação padrão da .NET Framework e cada versão tem um novo compilador. Dessa forma a versão 4 do .NET Framework (a mais recente) vem com um novo compilador vbc.exe que pode ser encontrado em C:\WINDOWS\Microsoft.NET\Framework\v4.0.xxxx\vbc.exe.

Obs: O Visual Studio 2010 ainda é um aplicativo 32 bits e este é um dos motivos que você precisa ajustar para a versão x86 do compilador se você desejar continuar editando e debugando no VS 2010.

Além do arquivo vbc.exe existe o arquivo vbc.exe.config sendo que este é um arquivo XML usado para especificar as versões do .NET Framework para o qual o compilador deve construir aplicações.

Com o .NET Framework 3.5 instalado se você abrir o arquivo vbc.exe.config irá encontrar o seguinte:

<?xml version =“1.0”?>
<configuration>
    <startup>
       <supportedRuntime version=“v2.0.50727” safemode=“true”/>
       <requiredRuntime version=“v2.0.50727” safemode=“true”/>
     </startup>
</configuration>

Observe que mesmo que você esteja usando o .NET Framework 3.5 o arquivo XML indica que o compilador ainda compila o código a ser executado em outras versões como a 2.0.

Com a versão 4.0 da .NET Framework este arquivo foi atualizado para a versão 4.0 (version="4.0.XXXX") e modificado para exibir apenas o tempo de execução suportado. Abaixo vemos o conteúdo do arquivo para a versão 4.0:

<?xml version ="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0.30319"/>
</startup>
</configuration>

No arquivo de configuração temos que:

- O elemento <startup> é o único elemento filho possível
- O elemento <requiredRuntime> só é necessário se sua aplicação via rodar sob a .NET Framework 1.0. Abaixo vemos um exemplo de como ficaria o arquivo para este cenário:

<?xml version =“1.0”?>
<configuration>
  <startup>
     <requiredRuntime version=“v1.0.3705” safemode=“true”/>
  </startup>
</configuration>

Se você estiver trabalhando com versões diferentes da plataforma .NET pode querer compilar seus programas usando o compilador Visual Basic adequado para a versão desejada. Para isso temos o elemento <supportedRuntime> .

No exemplo abaixo o aplicativo deve primeiro tentar executar a versão 2.0.50 da plataforma .NET e se esta versão não for encontrada então a próxima versão com o qual o compilador deve trabalhar é a versão 1.1.43

<?xml version =“1.0”?>
<configuration>
    <startup>
        <supportedRuntime version=“v2.0.50” safemode=“true”/>
        <supportedRuntime version=“v1.1.43” safemode=“true”/>
    </startup>
</configuration>

O elemento <supportedRuntime> contém dois atributos possíveis: version e safemode, sendo que ambos são opcionais.

Usando o compilador

Vou criar um pequeno programa usando o Bloco de notas , o código do arquivo será o seguinte:

'Testando o compilador VBC.EXE
Module Teste_Compilador
   Sub Main()
            System.Console.Writeline("Testando o compilador VBC.EXE")
    End Sub
End Module

Salve o arquivo com o nome de : Teste_Compilador.VB

Dica: Clique em Salvar Como e informe o nome acima entre aspas, assim : "Teste_Compilador.VB"

Este programa apenas irá escrever no console ( tela do DOS ) : Testando o compilador VBC.EXE

Agora é só compilar : digite  VBC Teste_Compilador.VB , isto irá gerar o arquivo Teste_Compilador.exe.

O compilador Visual Basic possui uma série de opções que lhe permitem definir que tipo de ações o compilador irá tomar com o processo de compilação; você pode especificar configurações adicionais usando uma barra, seguido do nome da opção e da configuração atribuída para a opção.

Por exemplo, se você deseja adicionar uma referência para Microsoft.VisualBasic.dll junto com a compilação, você pode definir sua linha de comando do compilador da seguinte forma:

vbc.exe Macoratti.vb /reference:Microsoft.VisualBasic.dll

Para visualizar a lista completa de opções de compilação digite: vbc.exe /?

Algumas das opções tem um sinal de mais (+) ou um sinal de menos (-) ao seu lado.

Um sinal de mais(+) significa que a opção deve ser habilitada, enquanto o sinal negativo(-) significa que a opção não deve ser habilitada.

Por exemplo, a seguinte linha de comando para compilação indica que a documentação deve ser ativada:

vbc.exe Macoratti.vb /reference:Microsoft.VisualBasic.dll /doc+

Ao compilar seu programa, usando o Visual Studio ou o compilador de linha de comando vbc, a Microsoft.VisualBasic.dll é adicionada como uma referência, e não há nenhuma abordagem direta de remover esta referência.

Uma solução é adicionar a opção -sdkpath na linha de comando para o compilador vbc (você não pode definir essa opção em um projeto VB no Visual Studio). Copie os arquivos da plataforma .NET que são exigidos por suas referências de projeto, em um diretório diferente, e constra o seu programa a partir da linha de comando, tendo a opção -sdkpath apontando para esse diretório.

Por que ???

Como você ja deve saber o VB .NET permite que você utilize código VB6 legado usando a sintaxe antiga. Dessa forma você ainda pode usar Cint, Mid, Instr, etc. A implementação da camada de compatibilidade esta na biblioteca Microsoft.VisualBasic.dll.

Além do arquivo de configuração temos também o arquivo vbc.rsp que é usado para indicar um conjunto de bibliotecas padrão disponíveis para o compilador, assim durante uma compilação o compilador Visual Basic usa este arquivo para cada compilação (a opção /nonconfig desabilita esse recurso).

Se você abrir o arquivo vbc.rsp irá visualizar uma lista de comandos do compilador como abaixo:

# This file contains command-line options that the VB
# command line compiler (VBC) will process as part
# of every compilation, unless the "/noconfig" option
# is specified. 

# Reference the common Framework libraries
/r:Accessibility.dll
/r:System.Configuration.dll
/r:System.Configuration.Install.dll
/r:System.Data.dll
/r:System.Data.OracleClient.dll
/r:System.Deployment.dll
/r:System.Design.dll
/r:System.DirectoryServices.dll
/r:System.dll
/r:System.Drawing.Design.dll
/r:System.Drawing.dll
/r:System.EnterpriseServices.dll
/r:System.Management.dll
/r:System.Messaging.dll
/r:System.Runtime.Remoting.dll
/r:System.Runtime.Serialization.Formatters.Soap.dll
/r:System.Security.dll
/r:System.ServiceProcess.dll
/r:System.Transactions.dll
/r:System.Web.dll
/r:System.Web.Mobile.dll
/r:System.Web.RegularExpressions.dll
/r:System.Web.Services.dll
/r:System.Windows.Forms.Dll
/r:System.XML.dll

/r:System.Workflow.Activities.dll
/r:System.Workflow.ComponentModel.dll
/r:System.Workflow.Runtime.dll
/r:System.Runtime.Serialization.dll
/r:System.ServiceModel.dll

/r:System.Core.dll
/r:System.Xml.Linq.dll
/r:System.Data.Linq.dll
/r:System.Data.DataSetExtensions.dll
/r:System.Web.Extensions.dll
/r:System.Web.Extensions.Design.dll
/r:System.ServiceModel.Web.dll

# Import System and Microsoft.VisualBasic
/imports:System
/imports:Microsoft.VisualBasic
/imports:System.Linq
/imports:System.Xml.Linq

/optioninfer+

Estes comandos refletem as referências e as importações que são feitas para cada item que você compilar usando o compilador de linha de comando.

Existem outros compiladores para você criar aplicações Visual Basic como os existentes nas aplicações:

"Dando graças ao Pai que nos fez idôneos para participar da herança dos santos na luz; O qual nos tirou da potestade das trevas, e nos transportou para o reino do FIlho do seu  amor;" Colossenses 1-12:13

Referências:


José Carlos Macoratti