Visual Studio解决方案路径环境变量

Oti*_*tis 9 visual-studio-2010 visual-studio-2008

VS是否有环境变量用于当前解决方案的路径?

例如,存在"%PathToWebRoot%",它通常设置为VS项目目录中的"WebSites"目录.它的价值可以通过多种方式改变.我想知道每次加载解决方案指向它的根时是否有变量.

我正在创建可能在不同机器上运行的单元测试,以及在方法是AspNetDevelopmentServerHost之前必须设置的方向之一.当然,建议不要对它们进行硬编码,但建议的环境变量不一定是您的站点所在的位置,在这种情况下也不一定.

Mar*_*ann 18

VS有很多可以 VS 工作的宏变量.调用为您提供解决方案完整路径的那个$(SolutionDir).但是,虽然这适用于构建前和构建后事件(以及AFAIK,在解决方案的MSBuild文件中),但这不是环境变量.如果您考虑一下,您不能拥有指向"当前解决方案的路径"的(全局)环境变量,因为您可能有多个VS实例打开.

根据您的单元测试框架,您可以经常询问它的执行上下文以获取当前目录.这可能不会给你解决方案路径,但......


Spu*_*pud 5

Visual Studio确实公开了解决方案路径的环境变量 - 它被调用SolutionPath.它看起来像这样:

SolutionPath=D:\Team\MyProject\main-branch\MyProject.sln

重要的是,您可以在从Visual Studio中生成的任何进程中使用它 - 例如,从您的解决方案启动批处理脚本(这是不同的Visual Studio实例之间的不同).

如果.bat通过按照本指南双击Visual Studio来启动文件,则批处理文件中将提供环境变量.

在我的特定情况下,我需要访问我的解决方案中的一个目录,并且我在同一级别上有一些代码分支.但是我的批处理脚本在源代码树中处于更高级别,并且没有简单的方法来确定"当前"分支.例如,这是我的结构:

D:\Team\MyProject\
  L-- Build
      L-- MyBatchScript.bat
  L-- main-branch
      |-- MyProject.sln
      L-- important-folder
  L-- dev-branch
      |-- MyProject.sln
      L-- important-folder
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)