2016-08-21 3 views
0

Я нашел проблему при попытке получить относительный путь из 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; 

Является ли это лучший подход?

+0

Что вы в конечном итоге хотите получить? К исполняющей сборке? В каталог bin веб-приложения? Может быть, лучший способ, если вы можете отредактировать свой вопрос, чтобы добавить то, что вы хотите получить. –

+0

Мне нужно знать путь к 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)? –

ответ

0

Как насчет

Assembly.GetExecutingAssembly().Location 
+0

Нет, это возвращает другой путь. Только Codebase работает при использовании в веб-проекте. –

+0

ОК, вы пропустили эту информацию из своего вопроса :) –

+0

Извините) Добавьте ее к P.S. –

0

решить свою задачу с помощью этого: System.Web.HttpRuntime.BinDirectory

Но вопрос - Как работать с Ури и конкретными символами? все еще открыт

Смежные вопросы