Работа с относительными путями к файлам в .Net - PullRequest
6 голосов
/ 19 ноября 2009

У меня есть проект на C #, в который я включил некоторые ресурсы, на которые мне нужно сослаться, используя класс Uri. Для этой конкретной проблемы у меня есть несколько шейдеров, помещенных в папку «Shaders» в корне проекта, но у меня была эта проблема раньше с другими файлами, такими как изображения и т. Д. До сих пор я использовал простое решение, дающее фиксированный абсолютный путь, и убедитесь, что файл присутствует в этом месте. Само собой разумеется - это не хорошее решение, и оно не будет работать в долгосрочной перспективе ...

Итак, как я могу использовать относительные пути для ссылки на мои ресурсы? Я думаю, мой вопрос имеет два аспекта:

  • Во-первых; Я не хочу ссылаться на относительный путь от моей папки отладки до папки проекта. Я хочу, чтобы файл был скопирован в папку сборки. Шейдеры включены в проект, но этого явно недостаточно. Как мне сказать проекту скопировать файлы при сборке? Или же; Какой общий способ решения этой проблемы?

  • Во-вторых, когда у меня есть папка "Shaders", скопированная в мою папку сборки - какой синтаксис Uri я использую для ссылки, например, "myShader.ps" находится внутри этой папки? Могу я просто сказать file:///Shaders/myShader.ps?

Ответы [ 2 ]

6 голосов
/ 19 ноября 2009

Чтобы получить Uri из каталога приложений, выполните:

Uri baseUri = new Uri(System.Reflection.Assembly.GetEntryAssembly().Location);
Uri shader = new Uri(baseUri, "shaders/test.ps");
3 голосов
/ 19 ноября 2009

Ответ на первый вопрос:

Как мне сказать проекту копировать файлы при сборке?

Добавьте файл в проект, щелкните правой кнопкой мыши, выберите Properties и измените Copy to Output Directory на Always Copy.

...