Domanda

Abbiamo uno strumento che genera un codice (cs) file che vengono utilizzati per costruire il progetto.

EDIT: Questi file sono l'altra metà di alcune classi parziali, in modo che il processo di compilazione richiede l'accesso alla fonte. Non è possibile compilarlo in una DLL, per esempio, e quindi impostare l'ordine di generazione.

Lo strumento viene eseguito durante la fase di pre-compilazione, ma i file vengono aggiornati nella soluzione solo dopo la compilazione, il che significa che la costruzione deve essere eseguita due volte per cancellare gli errori dopo una modifica all'ingresso.

Esempio:

  • Modifica strumento di file di input
  • Crea Esegui
    • Corre degli strumenti e file di modifiche di origine
  • crea FAIL
  • Crea Esegui
    • Corre degli strumenti e file di modifiche di origine (ma doesn sta realmente cambiare, perché l'ingresso rimane lo stesso)
  • generazione riesce

Tutte le idee come possiamo farla finita con la doppia costruzione, e permette di continuare il nostro strumento di essere eseguito da VS?

Grazie ragazzi!

È stato utile?

Soluzione 3

La risposta si è rivelata "Usa torta " e Powershell

Altri suggerimenti

Sarebbe banale scrivere una macro VS che eseguire il vostro strumento e quindi avviare una compilazione in modo che si potrebbe avere l'intero processo eseguito con un singolo tasto, in un modo più veloce che facendo un doppio accumulo.

In alternativa (o in combinazione con quanto sopra), è possibile aggiungere uno strumento personalizzato al menu VS strumento che esegue il vostro strumento (vedi Strumenti-> Strumenti esterni). Poi basta eseguire manualmente questo strumento personalizzato prima di eseguire la build - questo è ancora un doppio passo noioso, ma molto più veloce e più facile che costruire due volte. (E probabilmente sarete in grado di lasciare il vostro strumento di esecuzione nella fase di pre-compilazione in modo che il vecchio approccio doppio-build continuerà a funzionare).

Un'altra opzione potrebbe essere quella di modificare lo script MSBuild per il vostro progetto per Exec vostro strumento in precedenza nel processo di generazione in modo che la modifica al file viene prelevato durante le scansioni di dipendenza (è necessaria in modo che solo un passaggio di compilazione).

Nessuno di questi sono grandi soluzioni, ma speriamo che potrebbe dare un vantaggio che fornisce un miglioramento accettabile sopra la vostra situazione attuale.

refactoring del soln in 2 progetti: il primo il file cs GEN, la seconda lo utilizza (come DLL).

Il primo progetto (chiamarla Gen) ha 2 post-generazione eventi: 1 per eseguire lo strumento e ricreare il file di origine, e 2) compilare il file src Gen'ed per l'utilizzo da parte del 2 ° progetto:

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

Il secondo progetto (chiamarla Usa) fa riferimento al dll e lo chiama.

== 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();
    }}}

== Use.cs

using System;
namespace sm3
{class Use
    {static void Main(string[] args)
        {Gened g = new Gened();
         Console.Write(Gened.var.ToString());
         Console.ReadLine();
         }}}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top