Как вернуть Visual Studio текущий открытый каталог - PullRequest
3 голосов
/ 05 января 2009

У меня есть решение Visual Studio, которое состоит из нескольких проектов и разделено на разные каталоги.

В моем коде на C # или VB.NET я хочу определить базовый каталог (или каталог, в котором находится решение).

Грязным решением было бы вызвать каталог parent.parent.parent, пока я не найду файл * .sln, но у меня также есть несколько решений в других каталогах, которые я не хочу возвращать.

Мне просто интересно, есть ли более чистый метод, может быть, часть System.Diagnostics.Debugger или подобное?

Я с нетерпением жду вашего ответа, спасибо.

Ответы [ 4 ]

1 голос
/ 05 января 2009

Спасибо за ваши ответы. Все были очень полезны. Я работал с ответом от Dror и с небольшой модификацией в следующей строке решил эту проблему, спасибо.

string folder = System.IO.Path.GetDirectoryName(dte.Solution.FullName);

Причина, по которой я хочу это сделать, заключается в том, что во время выполнения кода в IDE я определяю текущую версию Subversion проекта, чтобы можно было встроить ее в работающую версию ПО.

Это делается автоматически. Смотрите статью, которую я написал в codeproject: текст ссылки

Если вы посмотрите на код, то увидите, что я выполняю следующее: dirinfoSourceWorkingDir = dirInfo.Parent (). Parent (). Parent ();

Мне нужно определить каталог решения, открытого в настоящее время в Visual Studio, но мне нужен более понятный способ (и если я изменю структуру каталогов, это нарушит код).

Надеюсь, это имеет смысл!

1 голос
/ 05 января 2009

Поскольку файл sln не нужно развертывать на целевом компьютере - зачем вы вообще его пытаетесь найти?
Если вы все еще хотите использовать sln в EnvDTE Namespace

EnvDTE.DTE dte = (EnvDTE.DTE) System.Runtime.InteropServices.Marshal.GetActiveObject ("VisualStudio.DTE");
string folder = System.IO.Path.GetDirectoryName (dte.ActiveDocument.FullName);

1 голос
/ 05 января 2009

Даже если у вас есть решения в других каталогах, предположительно, они не являются каталогами в вашем исходном решении, не так ли? Какую ситуацию вы предполагаете, когда произойдет сбой «возврата до тех пор, пока вы не найдете файл .sln» (кроме запуска из неправильного каталога)?

Одной из альтернатив будет передача каталога решения в качестве аргумента командной строки.

Зачем тебе это нужно, из интереса?

0 голосов
/ 05 января 2009

Код запускается из решения, то есть в отладчике IDE? Если это так, вы можете передать каталог решения как $(SolutionDir) из IDE в командную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...