2009-11-17 16 views
7

Tengo una sencilla aplicación de consola C# que lee en un archivo XML especificado el usuario, ejecuta una transformación XSLT en él y muestra los resultados.¿Cómo incrustar un archivo XSLT en un proyecto .NET para incluirlo en el archivo .exe de salida?

Cuando distribuyo mi aplicación a los usuarios, quiero distribuir un solo archivo .EXE. Mi código fuente consta de 3 archivos: el archivo .csproj, el archivo de código .cs y una hoja de estilo .xslt.

¿Cómo puedo configurar el csproj para que el .xslt esté "incrustado" dentro de la salida y no pueda ser visto o modificado por el usuario final?

Parece fácil, pero no puedo entenderlo y Google no está siendo demasiado útil.

Respuesta

13

Puede empotrarlo en su conjunto.

Agregue el archivo en su solución, establezca la acción de compilación en el recurso incrustado.

El lugar donde necesita leer el archivo usa http://msdn.microsoft.com/en-us/library/xc4235zt.aspx Assembly.GetManifestResourceStream que le dará una secuencia que puede escribir a fil o usar directamente.

Si no está muy seguro de qué nombre tiene su recurso, me parece útil Assembly.GetManifestResourceNames para enumerar todos los recursos.

+0

+1: Exactamente a la derecha . –

29

Agregue el archivo a su proyecto, luego seleccione el archivo y vaya a la ventana Propiedades (presione F4). Establezca la acción de compilación en "Recurso incrustado". Esto hará que el archivo se incruste en el archivo exe como un recurso.

using(Stream strm = Assembly.GetExecutingAssembly().GetManifestResourceStream("YourAssemblyName.filename.xslt")) 
using (XmlReader reader = XmlReader.Create(strm)) 
{ 
    XslTransform transform = new XslTransform(); 
    transform.Load(reader); 
    // use the XslTransform object 
} 
+1

Para aumentar el ejemplo de Fredrik, puede usar el espacio de nombres de su aplicación como "YourAssemblyName", como en '... GetManifestResourceStream (" This.is.my.namespace.filename.xslt "))' – user1585514

Cuestiones relacionadas