2009-10-21 15 views
6

En mi aplicación de cliente C#, uso XSLT para transformar XML en HTML.Trabajar con XSLT en Visual Studio

Me gustaría poder editar estos archivos en su lugar, sin tener que volver a compilar toda la solución. Tengo problemas para encontrar la forma de configurar Visual Studio 2008 para permitir esto.

El problema es que los archivos XSLT deben copiarse en el directorio de salida de alguna manera. Actualmente esto sucede durante el proceso de compilación. (Mis archivos XSLT están configurados para "copiar si es más nuevo".) El proceso de compilación puede tardar unos minutos, lo que parece excesivo para realizar pequeños ajustes en el HTML.

I podría hacer mis ediciones XSLT en el directorio de salida, pero el directorio de salida no está bajo control de fuente. Accidentalmente borré mis ediciones rápidas varias veces al construir mi solución.

Me gustaría reducir el tiempo de ciclo para depurar XSLT, mientras mantengo mis archivos XSLT bajo control de fuente y evitando sobreescrituras accidentales.

Resumen de las respuestas: Parece que el enfoque más práctico para resolver este problema, dado que Visual Studio no tiene una buena manera de hacerlo de la caja, es crear un proyecto separado que contiene los archivos de contenido. Estos archivos se copian a la ubicación de salida cuando se construye el proyecto. De esta forma no tengo que compilar toda la solución, solo un proyecto con toda la información estática como XSLT, CSS, imágenes, etc.

Varias personas sugirieron usar herramientas de sincronización o de copia por lotes, pero mientras esto funcione para mí personalmente, configurarlo para los otros miembros del equipo también sería mucho trabajo extra.

+0

Su primer párrafo no tiene sentido. Supongo que desea realizar cambios en los archivos XSLT en su ubicación original _sin tener que volver a compilar la solución para obtenerlos en el directorio de salida. – Oded

+0

Sí, @Oded, eso es lo que quise decir. He editado mi pregunta. Espero que ahora esté más claro. – dthrasher

Respuesta

4

No tengo completamente claro su pregunta, pero puede indicar a Visual Studio que copie el archivo de la solución a la carpeta de salida cada vez que compile.

Voy a tratar de entender su escenario:

  • tiene los archivos XSLT registrarse en control de código fuente junto con el código C#. Por ejemplo, si su proyecto está en una carpeta llamada MyProj, los archivos XSLT residen en MyProj/Templates
  • Desea poder editar los archivos xslt en la carpeta Plantillas y enviar esos cambios al control de origen tal como lo hace con .cs u otros archivos en su proyecto.
  • Desea una copia de sus archivos xslt en la carpeta bin/Debug o bin/Release junto con su ejecutable.

Si ese es el caso, agregue los archivos XSLT a su proyecto de Visual Studio. A continuación, haga clic derecho en ellos, abra Propiedades y configure "Acción de compilación" = "Contenido" y "Copiar al directorio de salida" = "Siempre". Siempre que construya su proyecto, la última copia de los archivos XSLT se colocará en el directorio bin/Debug o bin/Release.

+0

Esa es exactamente mi situación. Esperaba encontrar una manera de evitar tener que establecer las propiedades de Build Action y Copy to Output Directory para cada archivo XSLT en mi solución. También es tedioso tener que reconstruir toda la solución cada vez que hago un cambio menor en un archivo XSLT. – dthrasher

+0

Puede hacer un proyecto separado que contenga todos los archivos y salidas XSLT en el mismo lugar que su proyecto C#. Entonces, todo lo que tienes que hacer es reconstruir ese único proyecto. Si configura "Copiar al directorio de salida" = "Copiar si es más nuevo", esto será muy rápido. Además, si utiliza una acción posterior a la construcción en su proyecto XSLT para copiar todos los archivos .xslt, no tiene que configurarlos por separado: copia $ (ProjectDir)/*. Xslt $ (OutDir) – Anton

+0

Usar una acción de compilación posterior en los archivos XSLT es inteligente. Eso me ahorrará un buen trabajo de configuración. Y crear un proyecto separado para XSLT reduciría un poco el tiempo del ciclo. Voy a intentarlo. – dthrasher

1

Puede editar el archivo directamente en la carpeta de salida.

En otra nota, muchas personas no saben que las herramientas ricas están integradas en VS para permitir la depuración de xslts.

http://msdn.microsoft.com/en-us/library/ms255605(VS.80).aspx

+0

El problema con la edición del archivo en la carpeta de salida es recordar actualizar la versión dentro de la solución cuando haya terminado. La versión dentro de la solución es la que está bajo el control de la fuente. – dthrasher

+0

Es un truco, pero pones ese archivo en el proyecto. ¿Podrías recoger el archivo con una ruta relativa? .. \ .. \ folder \ file.xslt? – tzerb

+0

Una ruta relativa no funcionará, porque los archivos están en niveles diferentes en el árbol. E incluir el archivo XSLT en el directorio de salida del proyecto causa problemas cuando limpia o reconstruye la solución. Buenos pensamientos, sin embargo. – dthrasher

2

Un enfoque consiste en incluir una C# Preprocessor Directive señalar mi función de carga XSLT para el directorio de la solución cuando se encuentra en modo de depuración, pero el directorio de salida cuando se hace una versión de lanzamiento.

Algo así como:

string viewFolder = AppDomain.CurrentDomain.BaseDirectory; 

#if DEBUG 
// Move up from /bin/debug 
viewFolder = viewFolder + @"..\..\"; 
#endif 

Pero que se siente como un truco.

1

Una solución que podría funcionar para usted es configurar un junction en su Templates en su carpeta de resultados. Esto le permitiría usar los XSLT directamente sin copiarlos a la carpeta de salida. Una buena idea es asegurar (crear) el cruce como una acción de compilación.

Requisitos:

  • NTFS
  • una herramienta para crear uniones (por ejemplo junction)
+0

Eso podría funcionar, pero me gustaría evitar cualquier vínculo simbólico magic NTFS vudú. Incluso si entiendo cómo configurarlo, pidiendo al resto del equipo que lo haga ... – dthrasher

+0

las uniones no son mágicas y se pueden crear automáticamente usando acciones de compilación previa o posterior. Lamento escuchar que son demasiado complicados para su equipo. –

0

Podría utilizar un programa de sincronización de archivos (por ejemplo, Microsoft SyncToy "es una aplicación gratuita que sincroniza archivos y carpetas entre ubicaciones ") para copiar los archivos? Esto le permitiría evitar el paso "copiar en la compilación" porque los archivos se copian automáticamente después de guardarlos. Además, si los editó en el directorio de salida, los cambios podrían copiarse de nuevo en su directorio controlado de origen. No es lo que es el mejor programa de sincronización en tiempo real para este escenario, pero esa podría ser otra pregunta.

1
  1. Crear un archivo por lotes que copia sus XSLT de desde su ubicación de origen controlado a todas sus directorios Bin (bin/bin/depuración de liberación o lo que sea que usted haya definido)
  2. Añadir el archivo por lotes como un External Tool, opcionalmente asignando una pulsación de tecla (o cuerda) para ejecutar el archivo por lotes
  3. Editar, ejecutar la herramienta (asignaría una pulsación de tecla para que esto sea fácil), luego verifique su página web.
2

Aparentemente está manejando dos inquietudes en un proyecto. La primera preocupación es la lógica de su negocio (creación de instancias de una transformación XSLT, llamándola para transformar algo de contenido XML, generando el resultado HTML ...). La segunda preocupación es la Transformación misma.

¿Por qué no crear un proyecto separado para sus hojas xslt? "Construir" este proyecto consistiría en copiar las hojas a la carpeta de salida. Cambiar xslt no influirá en el otro proyecto, por lo tanto, reducirá el tiempo de compilación.

separación de las preocupaciones a nivel de proyecto, es decir :)

+0

Haces un buen punto acerca de la separación de preocupaciones. Su sugerencia sobre el uso de un proyecto separado es esencialmente la misma recomendación que hizo @antonmarkov. Creo que es probablemente la ruta más segura. – dthrasher

0

Tengo exactamente el mismo problema. Compré un programa llamado ViceVersa (http://www.tgrmn.com/) en el cual tengo perfiles de sincronización de configuración para que mis carpetas css, layout y xslt se sincronicen desde mi máquina a mi servidor de desarrollo tan pronto como se realicen los cambios. Si realizo algún cambio de código, simplemente publico de forma normal.

0

Entiendo que esta es una publicación anterior pero encontré una solución diferente para básicamente el mismo problema.

Visual Studio le permite "vincular" archivos.

Haga clic con el botón derecho en la carpeta de la solución donde desea ubicar el enlace del archivo.

Haga clic

'Añadir'

'elemento existente ..'

(seleccione el archivo)

Ir al 'Añadir' menú desplegable y seleccione 'Agregar Enlace'

Cuestiones relacionadas