Clique aqui para ler todos os artigos desta edição
Web Setup Project com o Visual Studio .Net
por Cristian Arrano
Lembro-me claramente como era o ato de fazer o deploy de uma aplicação web feita em asp 3.0, principalmente quando as regras de negócios eram encapsuladas em uma DLL desenvolvida com VB6. Com a chegada do .Net e do Visual Studio .Net, realizar o Deploy de uma aplicação se tornou um trabalho simples. Basta ter conhecimentos de copiar e colar, apesar de nem sempre ser esta a melhor solução, principalmente se algum dia sua aplicação for ser comercializada.
Neste artigo mostrarei como fazer o deployment de uma aplicação ASP.NET utilizando os recursos de criação de um instalador do Visual Studio Net. A aplicação terá um Web Form acessando dados armazenados em uma tabela em um banco de dados que também será criado durante a instalação da aplicação.
Banco de Dados
Para ilustrar o uso do banco de dados nesta aplicação, crie no SQL Server um banco de dados chamado AppDevBanco contendo uma tabela nomeada tblLivro com uma estrutura conforme a Figura 1 e insira uma massa de dados de teste.
Figura 1 – Estrutura da tabela tblLivro
Solução
Abra o Visual Studio e crie uma nova solução em branco. Selecione o menu File / New / Blank Solution e dê o nome de SlnWebProject. Adicione um projeto do tipo ASP.NET Web Application chamado WebApp, utilizando a linguagem Visual Basic .NET. Adicione um Web Form chamado principal.aspx que mostrará os registros da tabela do banco de dados criado anteriormente. Insira os seguintes controles: dois Labels (lblTitulo e lblErro) e um Datagrid (ID=dGridLivros), conforme a Figura 2.
Figura 2 – Web Form principal.aspx
Pressione F7 para abrir a janela de código. Como iremos utilizar o SQL Server, insira na primeira linha da janela de códigos a referência à classe SqlClient.
Imports System.Data.SqlClient
Localize o evento Page_Load do Web Form (principal.aspx.vb) e digite o código da Listagem 1 que executa a stored procedure para ler os dados na tabela e preencher o DataGrid:
Listagem 1 – Código para preencher o DataGrid
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not Page.IsPostBack Then
Try
'Define a conexão
Dim objConn As New SqlConnection("server=localhost;database=AppDevBanco;trusted_connection=true")
'Define a command
Dim objComm As New SqlCommand("spTrazLivros", _
objConn)
'Abre a conexão
objConn.Open()
'Especifica que é uma stored procedure
objComm.CommandType = CommandType.StoredProcedure
'Define e executa o DataReader
Dim dr As SqlDataReader = objComm.ExecuteReader(CommandBehavior.CloseConnection)
'Preenche o Datagrid
Me.dGridLivros.DataSource = dr
Me.dGridLivros.DataBind()
Catch ex As Exception
Me.lblErro.Text = ex.Message
End Try
End If
End Sub
Note que o SqlCommand (objComm) tem como string uma stored procedure que lista todos os campos da tabela tblLivro. Portanto, crie a stored procedure no SQL Server conforme a Listagem 2.
Listagem 2 – Conteúdo da Stored Procedure spTrazLivros
CREATE PROCEDURE spTrazLivros
AS
SELECT * FROM tblLivro
GO
No Visual Studio, abra o Solution Explorer, clique com o botão direito sobre a página principal.aspx e selecione a opção Set As Start Page. Isto faz com que esta página seja aberta quando a aplicação for chamada. Salve a página e selecione o meu Build / Build Solution para compilar. Por fim, selecione o menu Debug / Start para executar a página. Outra opção é pressionar CTRL + F5 para salvar, compilar e executar a página automaticamente. Veja o resultado no browser e certifique-se que o Datagrid é preenchido com todos os dados cadastrados na tabela.
Classes de Instalação
Agora que temos a aplicação ASP.NET, criaremos um projeto do tipo Class Library cujo objetivo é a instalação do banco de dados que será realizada via script SQL. Para criar um projeto do tipo Class Library no Visual Studio, selecione o menu File / New Project, escolha o tipo Class Library e coloque o nome cLibWebSetupDemo, como mostra a Figura 3. Escolha Add to Solution e clique em Ok para criar o projeto.
Figura 3 – Novo Projeto Class Library
Insira ao projeto um novo item do tipo Installer Class (cDefault.vb), ilustrado na Figura 4.
Figura 4 – Installer Class
A classe System.Configuration.Install.Installer é a principal classe para todas as instalações personalizadas que são realizadas no .Net Framework. Para a construção da classe que irá instalar o script do banco de dados, criaremos uma conexão ao banco de dados utilizando o objeto SqlConnection da Toolbox, como mostra a Figura 5. Portanto, selecione o menu View / Toolbox (Ctrl + Alt + X) e arraste para o documento o SqlConnection, localizado na aba Data.
Figura 5 – SqlConnection na Toolbox
Selecione o objeto e pressione F4 para exibir a janela de propriedades. Na propriedade ConnectionString, abra o dropdown e selecione a opcao . Será exibida a janela com as propriedades da conexão, conforme a Figura 6.
Figura 6 – Propriedades da conexao ao banco de dados
Digite (local) para o nome do servidor. Isso significa que o banco de dados estará na maquina local. É importante que a conexão tenha como mecanismo de logon a segurança integrada do Windows (Windows NT Integrated Security), para que no momento da execução do script não tenhamos nenhum problema com autenticação. Selecione o banco de dados master. Clique no botão “Testar conexão” para efetivar o teste e, se não houver problemas clique em Ok.
A seguir, iremos digitar os códigos dos métodos. Presione a tecla F7 para exibir a janela de códigos da classe. Logo após o bloco “Component Designer generated code”, crie os métodos Install e Uninstall. O método Install executa todas as ações necessárias para instalar o script e o método Uninstall executa as ações para desinstalar a aplicação, conforme Listagem 3.
Listagem 3 – Conteúdo dos metodos Install e Unistall
Public Overrides Sub Install( _
ByVal stateSaver As System.Collections.IDictionary)
MyBase.Install(stateSaver)
Dim strFileName As String
Dim Command As New SqlClient.SqlCommand
Dim strTarget As String = Me.Context.Parameters.Item("strTarg")
Dim sLine As String
Dim strDelimiter As String = "#"
Dim i As Integer
Try
strFileName = strTarget
Dim Reader As System.IO.StreamReader = System.IO.File.OpenText(strFileName)
Dim splitOut = Split(Reader.ReadToEnd(), _
strDelimiter)
Command.Connection = SqlConnection1
Command.Connection.Open()
For i = 0 To UBound(splitOut)
If splitOut(i) <> "" Then
Command.CommandText = splitOut(i)
Command.ExecuteNonQuery()
End If
Next
Catch ex As Exception
System.Windows.Forms.MessageBox.Show("Erro ao tentar instalar o banco de dados: " & ex.Message)
Throw ex
Finally
Command.Connection.Close()
End Try
End Sub
Public Overrides Sub Uninstall( _
ByVal stateserver As System.Collections.IDictionary)
MyBase.Uninstall(stateserver)
Dim Command As New SqlClient.SqlCommand
Command.CommandText = "USE MASTER DROP DATABASE [AppDevBanco]"
Try
Command.Connection = SqlConnection1
Command.Connection.Open()
Command.ExecuteNonQuery()
Catch ex As Exception
System.Windows.Forms.MessageBox.Show("Erro ao tentar desinstalar o banco de dados: " & ex.Message)
Throw ex
Finally
Command.Connection.Close()
End Try
System.Windows.Forms.MessageBox.Show("Banco de dados desinstalado com sucesso.")
End Sub
O método Install lê o arquivo de script através de um StreamReader e vai executando cada linha do arquivo separado por um delimitador (#). Note que a linha “Me.Context.Parameters.Item("strTarg")” referencia o arquivo script que será executado. Com a criação do Web Setup Project, poderemos configurar o valor da variável de contexto.
Web Setup Project
Agora que temos a aplicação ASP.NET e a classe de Instalação, precisamos colocar todo o conteúdo de ambas as aplicações em um projeto do tipo Web Setup. Para inserir um projeto do tipo Web Setup na solução, clique em File / New Project / Setup and Deployment Projects / Web Setup Project. Coloque como nome do projeto AppDevBancoSetup. Escolha Add to Solution e clique em Ok.
A seguir é preciso inserir os arquivos das aplicações (ASP.NET e Class Library). Portanto, no Solution Explorer, pressione o botão direito do mouse sobre o nome do projeto, escolha a opção Add / Project Output. Será exibida uma janela semelhante a Figura 7.
Figura 7 – Add Project Output Group
Escolha a opção Primary Output e clique em Ok. Repita a operação para o projeto cLibWebSetupDemo.
Agora todos os arquivos de ambos os projetos estão virtualmente inseridos no Web Setup Project. Caso seja feita alguma modificação em algum projeto fonte, não será necessário excluir e inserir novamente. Vale destacar que somente serão instalados os arquivos .aspx da aplicação Web.
Para ver os arquivos que serão instalados, selecione a opção View / Editor / File System. Note que aparecerá uma pasta chamada Web Application Folder, conforme a Figura 8.
Figura 8 – File System
Com o botão direito sobre o Web Application Folder, selecione propriedades e configure para a instalação da aplicação ASP.NET, como mostra a Figura 9.
Figura 9 – Propriedades da Web Application Folder
As principais propriedades são VirtualDirectory e DefaultDocument. A primeira especifica o nome do diretorio virtual que será criado no IIS (Internet Information Server), portanto, todo o trabalho de criação da pasta virtual no IIS e no Windows será realizado pelo instalador. A segunda propriedade especifica o arquivo Startup da aplicação ASP.NET. No caso o DefaultDocument será principal.aspx, que é o web form criado anteriormente no projeto ASP.NET.
Para configurar o valor da variável de contexto mencionado anteriormente, selecione no Solution Explorer a opção View / Custom Actions. Na pasta Install, selecione Primary output from cLibWebSetupDemo. Com o botao direito selecione a caixa de propriedades, localize o atributo CustomActionData e escreva a seguinte linha:
/strTarg=[TARGETDIR]sql.txt
O atributo CustomActionData permite armazenar informações sobre o processo de instalação da aplicação. Neste caso, o arquivo sql.txt estará localizado fisicamente onde a aplicação for instalada.
Com o Word ou Wordpad crie um arquivo RTF chamado License.rtf e um arquivo de texto chamado Readme.txt. Salve-os e insira-os no Web Setup Project. Para isso, basta escolher a opção Add / File com o botão direito sobre o nome do projeto no Solution Explorer.
O arquivo de criação do banco de dados também será inserido no projeto. Como este arquivo é extenso, não será detalhado aqui, mas está disponível para download no site da MSDN Magazine. O próximo passo é fazer com que antes que a instalação da aplicação seja executada, o usuário aceite os termos de instalação do software. Para isso, selecione a opção View / User Interface com o botão direito em cima do nome do projeto no Solution Explorer. É exibida uma tela semelhante à Figura 10.
Figura 10 – Tela do User Interface
Com o botão direito sobre Install / Start, selecione a opção Add Dialog. Escolha License Agreement e logo após clique em Ok. No quadro de propriedades, no atributo LicenseFile, selecione o arquivo License.rtf.
Crie uma pasta no menu de Programas do Windows. Para isso, selecione a opção View / File System no Solution Explorer. Com o botão direito sobre File System on Target Project, selecione Add Special Folder / User’s Programs Menu. Insira uma nova pasta chamada AppDevBanco, abaixo da pasta User’s Programs Menu. Selecione a opção Add / File para inserir o arquivo readme.txt.
Build
A aplicação Web Setup Project está pronta para ser compilada, o que significa que todos os arquivos da aplicação ASP.NET e da Class Library estarão em um executável .msi. Para executar o Build da aplicação, selecione a opção Build / Configuration Manager e escolha Release no Active Solution Configuration. Com o mouse sobre o nome da aplicação, selecione com o botão direito a opção Build, conforme mostra a Figura 11.
Figura 11 – Build da Aplicacao Web Setup Project
O arquivo de instalação estará localizado na pasta Release do projeto, como por exemplo: “C:\Visual Studio Projects\AppDevBanco\AppDevBancoSetup\Release”.
Conclusão
Neste artigo utilizei o Visual Studio .Net para criar uma aplicação do tipo Web Setup Project com o objetivo de criar um instalador para aplicações ASP.NET, passando pela criação automatizada do banco de dados até a criação das pastas e arquivos no IIS e no Windows.
Sem dúvida a facilidade de customização e utilização do Visual Studio .Net é o diferencial, já que praticamente todo o trabalho é feito de maneira visual.