2009-11-18 16 views
6

Mam projekt C#, w którym zawieram pewne zasoby, które muszę odnosić za pomocą klasy Uri. W tym konkretnym problemie mam kilka shaderów umieszczonych w folderze "Shadery" w katalogu głównym projektu, ale miałem już ten problem z innymi plikami, takimi jak obrazy itp. Do tej pory użyłem prostego rozwiązania dającego stałe absolutna ścieżka i upewnienie się, że plik jest obecny w tej lokalizacji. Nie trzeba dodawać, że to nie jest dobre rozwiązanie i na dłuższą metę nie będzie działać ...Praca ze względnymi ścieżkami plików w .Net

Jak zatem użyć względnych ścieżek do odsyłania moich zasobów? Przypuszczam, że moje pytanie jest dwojakie:

  • Pierwsza; Nie chcę odsyłać względnej ścieżki z mojego folderu debugowania do folderu projektu. Chcę, aby plik został skopiowany do folderu kompilacji. Shadery są uwzględnione w projekcie, ale oczywiście to nie wystarczy. Jak mogę powiedzieć projektowi, aby kopiował pliki podczas budowania? Lub; jaki jest najczęstszy sposób rozwiązania tego problemu?

  • Po drugie; kiedy mam folder "Shadery" skopiowany do mojego folderu kompilacji - jakiej składni Uri używam do odnoszenia się np. "myShader.ps" umieszczony w tym folderze? Czy mogę po prostu powiedzieć: file:///Shaders/myShader.ps?

Odpowiedz

6

Aby uzyskać Uri z katalogu aplikacji zrobić:

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

To dziwne, że musimy uciekać się do refleksji. Nie wszystkie środowiska to zaakceptują. Również (chociaż od tej kwestii chcemy przejść dalej), co jeśli identyfikator URI jest względny względem bieżącego katalogu, zamiast być względny w stosunku do miejsca montażu? –

3

Odpowiedź na pierwsze:

Jak mogę powiedzieć projektu skopiować pliki przy budowie?

Dodaj plik do projektu, kliknij prawym przyciskiem myszy, wybierz Properties i zmienić Copy to Output Directory do Always Copy.

+0

jestem zdezorientowany .. Zrobiłem to już, ale nie kopiować. Jednak "Działanie kompilacji" zostało ustawione na "Zasób". Przetestowałem więcej, a "None" lub "Embedded Resource" sprawia, że ​​pliki są kopiowane. Dzięki! Jaka jest właściwa "Build Action" do użycia? – stiank81

+0

The BuildAction ma wartość None. –

Powiązane problemy