Pergunta

Temos uma ferramenta que gera alguns arquivos de código (.cs) que são utilizados para construir o projeto.

EDITAR:Esses arquivos são a outra metade de algumas classes parciais, portanto o processo de construção requer acesso à fonte.Não é possível compilá-lo em uma DLL, por exemplo, e depois definir a ordem de construção.

A ferramenta é executada durante a etapa de pré-compilação, mas os arquivos são atualizados na solução somente após a compilação, o que significa que a compilação precisa ser executada duas vezes para limpar os erros após uma alteração na entrada.

Exemplo:

  • Modificar arquivo de entrada da ferramenta
  • Executar compilação
    • A ferramenta executa e altera o arquivo de origem
  • Falha na construção
  • Executar compilação
    • Ferramenta Executa e altera o arquivo de origem (mas na verdade muda, porque a entrada permanece a mesma)
  • A construção é bem-sucedida

Alguma idéia de como podemos acabar com a construção dupla e ainda permitir que nossa ferramenta seja executada no VS?

Obrigado rapazes!

Foi útil?

Solução 3

A resposta acabou sendo "Use Bolo" e Powershell

Outras dicas

Seria trivial escrever uma macro VS que executasse sua ferramenta e então iniciar uma compilação para que você pudesse ter todo o processo executado com um único toque de tecla, de uma forma mais rápida do que uma compilação dupla.

Alternativamente (ou em conjunto com o acima), você pode adicionar uma ferramenta personalizada ao menu VS Tool que executa sua ferramenta (veja Ferramentas->Ferramentas Externas).Em seguida, basta executar manualmente esta ferramenta personalizada antes de executar a construção - ainda é uma etapa dupla tediosa, mas muito mais rápida e fácil do que construir duas vezes.(e você provavelmente conseguirá deixar sua ferramenta em execução na etapa de pré-construção para que a antiga abordagem de construção dupla ainda funcione).

Outra opção pode ser editar o script MSBuild do seu projeto para executar sua ferramenta anteriormente no processo de compilação, para que a alteração no arquivo seja detectada durante as verificações de dependência (portanto, apenas uma passagem de compilação é necessária).

Nenhuma dessas são ótimas soluções, mas espero que possam lhe dar uma vantagem que proporcione uma melhoria aceitável em relação à sua situação atual.

refatore seu soln em 2 projetos:a primeira geração é o arquivo cs, a segunda o usa (como uma dll).

O primeiro projeto (chame-o de Gen) tem 2 eventos pós-construção:1 para executar a ferramenta e recriar o arquivo fonte e 2) compilar o arquivo Gen'ed src para uso pelo segundo projeto:

Gen.exe 
csc.exe /target:library Gened.cs

O segundo projeto (chame-o de Use) faz referência à dll e a chama.

==Gen.cs

using System.IO;
namespace sm3
{class Gen
{static string bod = "public static int var = 46;";
 static string clas = "public class Gened {" + bod + "}";
 static string ns  = "namespace sm3 {" + clas + "}";
 static void Main(string[] args)
 {StreamWriter SW;
     SW = File.CreateText("Gened.cs");
     SW.WriteLine(ns);
     SW.Close();
    }}}

==Usar.cs

using System;
namespace sm3
{class Use
    {static void Main(string[] args)
        {Gened g = new Gened();
         Console.Write(Gened.var.ToString());
         Console.ReadLine();
         }}}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top