Pregunta

Tenemos una herramienta que genera un cierto código (Cs) los archivos que se utilizan para construir el proyecto.

EDIT: Estos archivos son la otra mitad de algunas clases parciales, por lo que el proceso de construcción requiere el acceso a la fuente. No es posible compilar en un archivo DLL, por ejemplo, y luego establecer el orden de construcción.

La herramienta se ejecuta durante la etapa de pre-construcción, pero los archivos se actualizan en la solución sólo después de la construcción, lo que significa que las necesidades de construcción que se llevan a cabo dos veces para borrar los errores después de un cambio a la entrada.

Ejemplo:

  • Modificar herramienta de archivo de entrada
  • Ejecutar Construir
    • herramienta se ejecuta y cambia el archivo de origen
  • Construir un error
  • Ejecutar Construir
    • Se ejecuta la herramienta y cambios en los archivos fuente (pero doesn de hecho el cambio, ya que la entrada sigue siendo el mismo)
  • tiene éxito la creación

¿Alguna idea de cómo podemos acabar con la doble estructura, y todavía dejar que nuestra herramienta puede ejecutar desde VS?

Gracias chicos!

¿Fue útil?

Solución 3

La respuesta resultó ser "Uso Cake " y Powershell

Otros consejos

Sería trivial para escribir una macro VS que ejecutar su herramienta y luego iniciar una compilación por lo que podría tener todo el proceso ejecutado con una sola pulsación de tecla, de una manera más rápida que el hacer una doble estructura.

Como alternativa (o en combinación con lo anterior), puede agregar una herramienta personalizada al menú de herramientas VS que ejecuta la herramienta (ver Herramientas Herramientas-> Externo). Luego sólo hay que ejecutar manualmente esta herramienta personalizada antes de ejecutar la construcción - esto sigue siendo un doble paso tedioso, pero mucho más rápido y más fácil que construir dos veces. (Y que probablemente no será capaz de salir de su herramienta se ejecuta en la etapa de pre-construcción por lo que el viejo enfoque de doble acumulación seguirá funcionando).

Otra opción puede ser la de editar la secuencia de comandos de MSBuild para que su proyecto Exec su herramienta más temprano en el proceso de construcción de modo que el cambio en el archivo es recogido durante las exploraciones de dependencia (es necesario para un solo pase de construcción).

Ninguno de estos son grandes soluciones, pero espero que le puede dar una ventaja que proporciona una mejora aceptable sobre su situación actual.

refactorizar su Soln en 2 proyectos: la primera generación es el archivo cs, los segundos usos de la información (como un archivo DLL).

El primer proyecto (lo llaman Gen) tiene 2 eventos posteriores a la construcción: 1 para ejecutar la herramienta y volver a crear el archivo de origen, y 2) compilar el fichero src Gen'ed para su uso por el segundo proyecto:

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

El segundo proyecto (lo llaman Uso) hace referencia a la DLL y lo llama.

== 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();
         }}}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top