Как я могу преобразовать Assembly.CodeBase в путь файловой системы в C #?

У меня есть проект, в котором шаблоны хранятся в папке \ Templates рядом с DLL и EXE.

Я хочу определить этот путь к файлу во время выполнения, но с использованием техники, которая будет работать как в модульном тесте, так и в производственной среде (и я не хочу отключать теневое копирование в NUnit!)

Сборка. Местоположение бесполезно, потому что оно возвращает путь теневой копии сборки при работе под NUnit.

Environment.CommandLine также имеет ограниченное использование, потому что в NUnit и др. Он возвращает путь к NUnit, а не к моему проекту.

Assembly.CodeBase выглядит многообещающе, но это UNC-путь:

file:///D:/projects/MyApp/MyApp/bin/debug/MyApp.exe

Теперь я мог бы превратить его в путь локальной файловой системы, используя строковые манипуляции, но я подозреваю, что есть более чистый способ сделать он где-то похоронен в .NET framework. Кто-нибудь знает рекомендуемый способ сделать это?

(Выдача исключения, если UNC-путь не является URL-адресом file: /// , абсолютно нормально в этом контексте)

60
задан Ruben Bartelink 8 September 2014 в 23:47
поделиться