Visual Studio предоставляет переменную среды для пути решения - она называется SolutionPath
. Это выглядит так:
SolutionPath=D:\Team\MyProject\main-branch\MyProject.sln
Важно, что вы можете использовать его в любом процессе, порожденном из Visual Studio, например, при запуске пакетных сценариев из вашего решения (так оно может отличаться в разных экземплярах Visual Studio).
Если вы настроите Visual Studio для запуска .bat
файлов, дважды щелкнув по ним, выполнив это руководство , тогда переменная среды будет доступна в вашем пакетном файле.
В моем конкретном случае мне нужно было попасть в каталог моего решения, и у меня было несколько ветвей кода на одном уровне. Но мой пакетный скрипт находился на более высоком уровне в исходном дереве, и у него не было простого способа определить «текущую» ветвь. Например, это была моя структура:
D:\Team\MyProject\
L-- Build
L-- MyBatchScript.bat
L-- main-branch
|-- MyProject.sln
L-- important-folder
L-- dev-branch
|-- MyProject.sln
L-- important-folder
Я указывал MyBatchScript.bat
как элемент решения в каждом решении, чтобы запустить его, дважды щелкнув по нему.
Чтобы получить папку решения, а не путь к файлу решения, я использовал немного волшебства пакетного сценария DOS:
FOR %%d IN (%SolutionPath%) DO SET SolutionFolder=%%~dpd
REM Now I can run a tool with the correct folder
mycustomtool.exe %SolutionFolder%important-folder