Я нашел проблему при попытке получить относительный путь из Codebase с использованием Uri.System.Uri не работает с определенными символами
var codeBase = Assembly.GetExecutingAssembly().CodeBase;
var path = new Uri(codeBase).LocalPath;
Проблема в том, что мое рабочее место находится в .../DEV/C#/рабочее пространство/... Windows, позволяет сделать имя папки, как "C#", но System.Uri Безразлично» t понять, что и вырезать все после "#" символ.
Я знаю, что Codebase просто начать с «файла: ///», поэтому я могу избежать этой проблемы, используя
var path = codeBase.Substring(8);
return Directory.GetParent(path).FullName;
, но я думаю, что есть более элегантное решение. Разве ты не знаешь?
P.S. Я не хочу переименовывать свою папку, потому что сложно сделать весь мой проект TFS. Пожалуйста, не предлагайте никаких других методов Assemblies
или AppDomain
для получения пути - только для меня работает Assembly.GetExecutingAssembly().Codebase
.
UPD: Может быть, я могу использовать что-то вроде этого:
var uri = new Uri(codeBase);
var path = uri.LocalPath + uri.Fragment;
Является ли это лучший подход?
Что вы в конечном итоге хотите получить? К исполняющей сборке? В каталог bin веб-приложения? Может быть, лучший способ, если вы можете отредактировать свой вопрос, чтобы добавить то, что вы хотите получить. –
Мне нужно знать путь к bin dir веб-приложения. Когда я пытаюсь использовать 'Assembly.GetAssembly(). Откуда он возвращает« C: \\ Users \\ user \\ AppData \\ Local \\ Temp \\ Временные файлы ASP.NET \\ root \\ 538d6292 \ \ 93f9f073 \\ сборки \\ DL3 \\ ... ". Насколько я знаю, использование 'AppDomain.CurrentDomain.BaseDirectory' для управления файловой системой - плохой подход. 'Assembly.GetExecutiongAssembly(). CodeBase' возвращает только то, что мне нужно. Мой вопрос только в том, как избежать проблем с конкретными символами в Ури? Или как сделать это лучше, чем просто удалить «file: ///» с помощью Substring (8)? –