Desenvolvimento - Visual Basic .NET

Como Criar Templates Em VB.Net

Devido a falta de documentação referente a este assunto, decidi escrever este artigo para ajudar aqueles que necessitam criar templates em VB.NET.

por Thiago Fernandes Custódio



Devido a falta de documentação referente a este assunto, decidi escrever este artigo para ajudar aqueles que necessitam criar templates em VB.NET

Primeiro temos que ter bem clara a idéia do que é um template e para que ele serve. Um template nada mais é do que uma forma de agilizar a criação de forms padronizados.
Por exemplo, temos um form com diversas imagens, logotipo da empresa e desejamos criar outros forms seguindo o mesmo padrão.

Mãos à obra !

Criando um novo Project Template



.vsz
.vsdir
.vbproj



VSWIZARD 6.0
Wizard=VsWizard.VsWizardEngine.7.1
Param="WIZARD_NAME = TemplateApplication"
Param="WIZARD_UI = FALSE"
Param="PROJECT_TYPE = VBPROJ"

Obs : Repare a terceira linha, ela indica o nome da pasta que criaremos à seguir.




Adicione a linha a seguir ao fim do documento e salve-o

TemplateApplication.vsz|{164B10B9-B200-11D0-8C61-00A0C91E29D5}|TemplateApplication|85|Template Application|{164B10B9-B200-11D0-8C61-00A0C91E29D5}|4507| |TemplateApplication

***Explicação :

Cada linha é subdividia em diversos grupos separados por um pipe ("|") . O primeiro grupo indica o atual arquivo .vsz criado anteriormente (passo 3) , o segundo grupo é guid usado pelo WindowsApplication.vsz , e o terceiro e o último grupo, o nome padrão do nosso projeto.





Templates

Scripts



\Templates\1033

\Scripts\1033



Copie o arquivo default.js de (\Microsoft Visual Studio .NET 2003\Vb7\VBWizards\WindowsApplication\Scripts\1033), para a pasta
\Microsoft Visual Studio .NET 2003\Vb7\VBWizards\TemplateApplication\Scripts\1033



O arquivo possui a seguinte estrutura :

//
// Copyright (c) Microsoft Corporation 2001-2002. All rights reserved.
//

function OnFinish(selProj, selObj)
{
var oldSuppressUIValue = true;
try
{
oldSuppressUIValue = dte.SuppressUI;
var bSilent = wizard.FindSymbol("SILENT_WIZARD");
dte.SuppressUI = bSilent;

var strProjectName = wizard.FindSymbol("PROJECT_NAME");
var strProjectPath = wizard.FindSymbol("PROJECT_PATH");
var strTemplatePath = wizard.FindSymbol("TEMPLATES_PATH");
var strTemplateFile = strTemplatePath + "\\WindowsApplication.vbproj";

var project = CreateVSProject(strProjectName, ".vbproj", strProjectPath, strTemplateFile);
if( project )
{
strProjectName = project.Name; //In case it got changed

var item;
var editor;

var strRawGuid = wizard.CreateGuid();
wizard.AddSymbol("GUID_ASSEMBLY", wizard.FormatGuid(strRawGuid, 0));

strTemplateFile = strTemplatePath + "\\AssemblyInfo.vb";
item = AddFileToVSProject("AssemblyInfo.vb", project, project.ProjectItems, strTemplateFile, false);
if( item )
{
item.Properties("SubType").Value = "Code";
}

strTemplateFile = strTemplatePath + "\\Form.vb";
item = AddFileToVSProject("Form1.vb", project, project.ProjectItems, strTemplateFile, false);
if( item )
{
item.Properties("SubType").Value = "Form";
project.Properties("StartupObject").Value = project.Properties("RootNamespace").Value + ".Form1";

editor = item.Open(vsViewKindPrimary);
editor.Visible = true;
}
project.Save();
}

return 0;
}
catch(e)
{
switch(e.number)
{
case -2147024816 /* FILE_ALREADY_EXISTS */ :
return -2147213313;

default:
SetErrorInfo(e);
return e.number;
}
}
finally
{
dte.SuppressUI = oldSuppressUIValue;
}
}



strTemplateFile = strTemplatePath + "\\AssemblyInfo.vb";
item = AddFileToVSProject("AssemblyInfo.vb", project, project.ProjectItems, strTemplateFile, false);



//
// Copyright (c) Microsoft Corporation 2001-2002. All rights reserved.
//

function OnFinish(selProj, selObj)
{
var oldSuppressUIValue = true;
try
{
oldSuppressUIValue = dte.SuppressUI;
var bSilent = wizard.FindSymbol("SILENT_WIZARD");
dte.SuppressUI = bSilent;

var strProjectName = wizard.FindSymbol("PROJECT_NAME");
var strProjectPath = wizard.FindSymbol("PROJECT_PATH");
var strTemplatePath = wizard.FindSymbol("TEMPLATES_PATH");
var strTemplateFile = strTemplatePath + "\\WindowsApplication.vbproj";

var project = CreateVSProject(strProjectName, ".vbproj", strProjectPath, strTemplateFile);
if( project )
{
strProjectName = project.Name; //In case it got changed

var item;
var editor;

var strRawGuid = wizard.CreateGuid();
wizard.AddSymbol("GUID_ASSEMBLY", wizard.FormatGuid(strRawGuid, 0));

strTemplateFile = strTemplatePath + "\\AssemblyInfo.vb";
item = AddFileToVSProject("AssemblyInfo.vb", project, project.ProjectItems, strTemplateFile, false);

strTemplateFile = strTemplatePath + "\\AssemblyInfo.vb";
item = AddFileToVSProject("AssemblyInfo.vb", project, project.ProjectItems, strTemplateFile, false);

if( item )
{
item.Properties("SubType").Value = "Code";
}

strTemplateFile = strTemplatePath + "\\Form.vb";
item = AddFileToVSProject("Form1.vb", project, project.ProjectItems, strTemplateFile, false);
if( item )
{
item.Properties("SubType").Value = "Form";
project.Properties("StartupObject").Value = project.Properties("RootNamespace").Value + ".Form1";

editor = item.Open(vsViewKindPrimary);
editor.Visible = true;
}
project.Save();
}

return 0;
}
catch(e)
{
switch(e.number)
{
case -2147024816 /* FILE_ALREADY_EXISTS */ :
return -2147213313;

default:
SetErrorInfo(e);
return e.number;
}
}
finally
{
dte.SuppressUI = oldSuppressUIValue;
}
}



altere de:

strTemplateFile = strTemplatePath + "\\AssemblyInfo.vb";
item = AddFileToVSProject("AssemblyInfo.vb", project, project.ProjectItems, strTemplateFile, false);

para (Assemblyinfo.vb para Class.vb e Assemplyinfo.vb para Class1.vb):

strTemplateFile = strTemplatePath + "\\Class.vb";
item = AddFileToVSProject("Class1.vb", project, project.ProjectItems, strTemplateFile, false);

Note que na segunda linha, Ao invés de simplesmente Class, ela passou para Class1 , pois Class é uma palavra reservada.



WindowsApplication .vbproj

Form.vb

Assemblyinfo.vb

para a nossa pasta \Microsoft Visual Studio .NET 2003\Vb7\VBWizards\TemplateApplication\Templates\1033




Thiago Fernandes Custódio

Thiago Fernandes Custódio - Gennari & Peartree Projetos e Sistemas S/C Ltda.
DIV 29 - Centro de Desenvolvimento
Programador