Как вернуть текущий открытый каталог Soution в Visual Studio

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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
2 385
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

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

Ответ принят как подходящий

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

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

Это может не сработать, если открыто два или более экземпляра. Вы должны найти правильный экземпляр в таблице запущенных объектов. Для этого есть код.

user1228 24.01.2011 23:40

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

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

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

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

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

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

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

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

Другие вопросы по теме