Переменная среды Visual Studio Solution Path - PullRequest
9 голосов
/ 25 июня 2009

Есть ли в VS переменная среды для пути к текущему решению?

Например, существует «% PathToWebRoot%», который обычно устанавливается в каталог «WebSites» в каталоге вашего проекта VS. Значение этого может быть изменено любым количеством способов. Мне интересно, есть ли переменная, которая меняется каждый раз, когда вы загружаете решение, указывающее на его корень.

Я создаю модульные тесты, которые потенциально могут быть запущены на разных машинах, и одним из направлений, которое вы должны установить перед методом, является AspNetDevelopmentServerHost. Конечно, рекомендуется не кодировать их жестко, но рекомендуемая переменная среды не обязательно должна быть там, где будет находиться ваш сайт, и не в этом случае.

Ответы [ 2 ]

17 голосов
/ 25 июня 2009

VS имеет много макропеременных, которые работают от в VS. Тот, который дает вам полный путь к решению, называется $(SolutionDir). Однако, хотя это работает из событий до и после сборки (и AFAIK в файле MSBuild решения), это не переменная среды. Если подумать, у вас не может быть (глобальной) переменной среды, указывающей на «путь к текущему решению», поскольку у вас может быть открыто более одного экземпляра VS.

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

5 голосов
/ 21 мая 2012

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...