Pesquisar este blog

terça-feira, 21 de julho de 2015

Customização de arquivos BAT : Crie arquivos BAT dinâmicamente

Um arquivo BAT é composto por instruções a serem executadas sequencialmente. Sua execução geralmente é agendadas e costuma efetuar tarefas em lote. 
Na maioria dos casos, as tarefas são específicas e dificilmente precisam ser alteradas. Porém, em alguns momentos, é necessário que o arquivo obtenha informações dinâmicas de outras fontes de dados.
E é neste momento que a plataforma .NET se demonstra muito útil! Linguagens de outras plataformas, como Java por exemplo, também são capazes de realizar esta tarefa, porém neste post, utilizaremos a linguagem C# da plataforma .NET. 
Embora o exemplo a seguir seja um tanto quanto simplista, ele permite ter uma ideia do potencial de arquivos bat.
No exemplo a seguir criaremos uma classe dinamicamente e geraremos um arquivo bat responsável pela compilação da mesma, transformando esta em uma dll. Para tal, criaremos um projeto do tipo Console:
A codificação da classe program será a seguinte:
string className = "testeBuild";
string folderPath = @"c:\temp\";
StringBuilder sBuilderClasse = new StringBuilder();
sBuilderClasse.AppendLine("using System;");
sBuilderClasse.AppendLine("namespace CompileViaBatDemo");
sBuilderClasse.AppendLine("{");
sBuilderClasse.AppendLine("     public class " + className);
sBuilderClasse.AppendLine("     {");
sBuilderClasse.AppendLine("         public string Hello { ");
sBuilderClasse.AppendLine("             get {              ");
sBuilderClasse.AppendLine("                 return \"Hi\";");
sBuilderClasse.AppendLine("             } ");
sBuilderClasse.AppendLine("         }");
sBuilderClasse.AppendLine("     }");
sBuilderClasse.AppendLine("}");
File.WriteAllText(string.Format("{0}{1}.cs", folderPath, className), sBuilderClasse.ToString(), Encoding.UTF8);
StringBuilder sBuilderBat = new StringBuilder();
sBuilderBat.AppendLine(@"C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /target:library " + string.Format("{0}{1}.cs", folderPath, className));
sBuilderBat.AppendLine(@"del " + string.Format("{0}{1}.cs", folderPath, className));
sBuilderBat.AppendLine(@"del " + string.Format("{0}{1}.bat", folderPath, className));
sBuilderBat.AppendLine(@"pause");
File.WriteAllText(string.Format("{0}{1}.bat", folderPath, className), sBuilderBat.ToString(), Encoding.ASCII);
Ao executar este código, será gerado no diretório "c:\temp" nossa classe e o arquivo bat.
Quando o arquivo bat criado é executado, o mesmo gera a dll a partir da compilação da classe, deleta a classe e em seguida a si mesmo.
Ao Importar a dll criada no Visual Studio, é possível consumir sua classe.

Nenhum comentário:

Postar um comentário