2009-11-18 13 views
6

Ho un progetto C# in cui includo alcune risorse che ho bisogno di fare riferimento utilizzando la classe Uri. Per questo problema specifico ho alcuni shader collocati in una cartella "Shaders" nella radice del progetto, ma ho avuto questo problema prima con altri file come immagini, ecc. Finora ho usato la soluzione semplice dando un fisso percorso assoluto e assicurandosi che il file sia presente in quella posizione. Inutile dire che - questa non è una buona soluzione, e non funzionerà nel lungo periodo ...Lavorare con percorsi di file relativi a .Net

Così, come posso utilizzare i percorsi relativi per riferirsi mie risorse? Credo che la mia domanda sia duplice:

  • Primo; Non voglio riferire il percorso relativo dalla mia cartella Debug alla cartella del progetto. Voglio che il file sia copiato nella cartella build. Gli shader sono inclusi nel progetto, ma ovviamente questo non è abbastanza. Come faccio a dire al progetto di copiare i file durante la costruzione? O; qual è il modo comune per risolvere questo?

  • secondo; quando ho la cartella "Shaders" copiata nella mia cartella di compilazione - quale sintassi Uri devo usare per fare riferimento ad es. "myShader.ps" inserito in questa cartella? Posso semplicemente dire file:///Shaders/myShader.ps?

risposta

6

Per ottenere un Uri dalla directory delle applicazioni fare:

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

È strano che dobbiamo ricorrere alla riflessione. Non tutti gli ambienti lo accetteranno. Inoltre (anche se stiamo andando alla deriva dalla domanda esatta qui) e se l'URI è relativo a qualunque directory è corrente, invece di essere relativo alla posizione dell'assembly? –

3

risposta alla prima:

Come faccio a dire il progetto per copiare i file quando si costruisce?

aggiungere il file al progetto, fate clic destro, selezionare Properties e cambiare Copy to Output Directory a Always Copy.

+0

Sono confuso .. Ho fatto questo già, ma di non averlo copiato. Tuttavia, "Build Action" era impostato su "Resource". Ho provato un po 'di più e "None" o "Embedded Resource" fa copiare i file. Grazie! Qual è la corretta "Build Action" da usare? – stiank81

+0

La BuildAction è None. –

Problemi correlati