Question

Nous avons un outil qui génère un code (.cs) les fichiers qui sont utilisés pour construire le projet.

EDIT: Ces fichiers sont l'autre moitié de certaines classes partielles, de sorte que le processus de construction nécessite l'accès à la source. Il est impossible de le compiler dans une DLL, par exemple, puis définir l'ordre de construction.

L'outil est exécuté lors de l'étape de pré-construction, mais les fichiers sont mis à jour dans la solution seulement après la construction, ce qui signifie que la construction doit être effectuée deux fois pour effacer les erreurs après un changement à l'entrée.

Exemple:

  • Modifier l'outil fichier d'entrée
  • Exécuter Construire
    • Runs d'outils et changements fichier source
  • génération échoue
  • Exécuter Construire
    • Runs d'outils et le fichier source de changements (mais il doesn Changeons en fait, parce que l'entrée reste le même)
  • Construire Réussit

Toutes les idées comment nous pouvons en finir avec la double construction, et laissez encore notre outil être exécuté à partir VS?

Merci les gars!

Était-ce utile?

La solution 3

La réponse est avéré être "Utiliser gâteau " et Powershell

Autres conseils

Il serait trivial d'écrire une macro VS qui exécuter votre outil, puis commencer une construction de sorte que vous pourriez avoir tout le processus exécuté avec une seule pression de touche, d'une manière plus rapide que faire une double construction.

Alternativement (ou en conjonction avec ce qui précède), vous pouvez ajouter un outil personnalisé dans le menu VS outil qui exécute votre outil (voir Outils-> Outils externes). Ensuite, il suffit d'exécuter manuellement cet outil personnalisé avant d'exécuter la construction - c'est encore une double étape fastidieuse, mais beaucoup plus rapide et plus facile que la construction de deux fois. (Et vous serez probablement en mesure de quitter votre outil en cours d'exécution dans l'étape de pré-construction si l'ancienne approche double construction continuera à fonctionner).

Une autre option peut être de modifier le script MSBuild pour votre projet à Exec votre outil plus tôt dans le processus de construction afin que le changement dans le fichier est repris au cours des analyses de dépendance (si une seule passe est nécessaire de construire).

Aucune de ces grandes solutions, mais nous espérons qu'ils pourraient vous donner une avance qui fournit une amélioration acceptable sur votre situation actuelle.

factoriser votre soln dans 2 projets: la première génération de le fichier cs, le second utilise (comme dll).

Le premier projet (appeler Gen) a deux événements post-construction: 1 pour exécuter l'outil et recréer le fichier source, et 2) compiler le fichier src Gen'ed pour le 2ème projet:

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

Le second projet (appelons utilisation) fait référence à la dll et l'appelle.

== 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();
         }}}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top