2010-02-09 10 views
5

tengo una solución en Visual Studio Express que tiene este aspecto:¿Por qué "Copiar si es nuevo" no copia un archivo cuando se actualiza el archivo?

La clase LogicSchema en C# que analizar un archivo XML especificado en tiempo de ejecución. El siguiente es en el método de Program.csmain:

LogicSchema ls = new LogicSchema(
    XDocument.Load(
     "schemas\\C#Schema.xml", 
     LoadOptions.PreserveWhitespace)); 

creé una carpeta en mi solución llamada "esquemas" para guardar el archivo XML y establecer la Acción de generación de contenido y el "Copiar a directorio de salida" value to be Copie si es más reciente.

Mi expectativa es que si abre el archivo en el bloc de notas, realiza un cambio y lo guarda, la versión actualizada del archivo XML se copiará en el directorio de salida (en este caso, bin \ debug) cuando presione F5 . Sin embargo, el archivo actualizado no se copia en el directorio de salida a menos que seleccione Reconstruir. Regular Build no funciona.

¿Qué debo cambiar para que cuando presione F5, el archivo se copie en el directorio de salida cuando se haya actualizado?

Respuesta

2

¿Ha intentado establecer la acción de compilación en Ninguno?

+0

gracias por la sugerencia, pero eso no parece funcionar. –

+0

He intentado el mismo escenario en VS2010 Beta 2 y funciona. Parece un error en la edición express. – Ikaso

2

Parece que funciona también en Visual Studio 2008 Team System - debe haber edición Expresión específica, por lo que no puede repro ...

bien, mi suposición original no era cierto - se trata de XML archivo que se encuentra en la biblioteca a la que se hace referencia. Se puede reproducir ahora

Creo que la forma más natural sería insertar el XML como recurso y luego leerlo con GetManifestResourceStream(). De esta forma, el archivo XML seguiría su archivo DLL como lo hace referencia sin copiarlo por separado, incluso si hace referencia directamente al dll y no a través de la referencia del proyecto.

... ¿o podría utilizar el evento Preconstrucción? (Propiedades del proyecto - Eventos de compilación):

copy $(ProjectDir)test.xml $(SolutiontDir)projectFolder\bin\debug\test.xml 

Creo que siempre se ejecutará incluso si VS cree que no han cambiado los archivos fuente. Al menos en VS2008 completo, este es el caso, simplemente probado.

+0

Podría tener algo que ver con el hecho de que la carpeta "schemas" es parte de * LogicParser *, mientras que Program.cs, la clase desde la cual se está instanciando 'LogicSchema', está en * LogicParser.ConsoleApp *. –

+0

Es cierto: era demasiado vago para hacer la biblioteca de clases por separado cuando probé esto. Lo hizo ahora y sucede en la versión completa de Visual Studio también. Por lo tanto, no es específica de la edición Expression. Supongo que sus opciones son agregar el evento de preconstrucción con $ (SolutionDir) o luego incrustar el xml como recurso y leerlo con GetManifestResourceStream(). Creo que lo último es mejor: si está creando un dll, sería mejor si puede usarlo haciendo referencia a él sin agregar otros archivos (xml). – Ope

Cuestiones relacionadas