2009-11-18 21 views
6

Tengo un proyecto de C# donde incluyo algunos recursos que debo consultar usando la clase Uri. Para este problema específico, tengo algunos sombreadores colocados en la carpeta "Shaders" en la raíz del proyecto, pero he tenido este problema antes con otros archivos como imágenes, etc. Hasta ahora, he utilizado la solución simple que proporciona una solución ruta absoluta, y asegurándose de que el archivo esté presente en esa ubicación. Huelga decir que esta no es una buena solución, y no funcionará en el largo plazo ...Trabajando con rutas de archivos relativas en .Net

Entonces, ¿cómo puedo usar rutas relativas para referir mis recursos? Supongo que mi pregunta es doble:

  • Primero; No quiero referir la ruta relativa desde mi carpeta Debug a la carpeta del proyecto. Quiero que el archivo se copie a la carpeta de compilación. Los sombreadores están incluidos en el proyecto, pero obviamente esto no es suficiente. ¿Cómo le digo al proyecto que copie los archivos al compilar? O; ¿Cuál es la forma común de resolver esto?

  • Segundo; cuando tengo copiada la carpeta "Shaders" en mi carpeta de compilación, ¿qué sintaxis de Uri utilizo para referirme, p. "myShader.ps" colocado dentro de esta carpeta? ¿Puedo simplemente decir file:///Shaders/myShader.ps?

Respuesta

6

Para obtener un URI de su directorio de aplicaciones hacer:

Uri baseUri = new Uri(System.Reflection.Assembly.GetEntryAssembly().Location); 
Uri shader = new Uri(baseUri, "shaders/test.ps"); 
+0

Es extraño que tengamos que recurrir a la reflexión. No todos los entornos aceptarán eso. Además (aunque estamos derivando de la pregunta exacta aquí), ¿qué ocurre si el URI está relacionado con el directorio actual, en lugar de ser relativo a la ubicación del ensamblado? –

3

respuesta a la primera:

¿Cómo le digo al proyecto para copiar los archivos en la construcción?

agregar el archivo al proyecto, haga clic derecho, seleccionar y cambiar PropertiesCopy to Output Directory a Always Copy.

+0

Estoy confundido .. Hice esto ya, pero no copiar. Sin embargo, la "Acción de compilación" se configuró en "Recurso". Probé un poco más, y "Ninguno" o "Recurso incrustado" hace que los archivos se copien. ¡Gracias! ¿Cuál es la "Acción de compilación" adecuada para usar? – stiank81

+0

BuildAction es None. –

Cuestiones relacionadas