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

15

Visual Studio(VS)是否有一个环境变量指向当前解决方案的路径?

例如,有一个名为“%PathToWebRoot%”的变量,通常设置为您的VS项目目录中的“WebSites”目录。它的值可以通过多种方式更改。我想知道是否有一个变量,在每次加载解决方案时都会更改以指向它的根目录。

我正在创建单元测试,可能会在不同的机器上运行,其中一个需要设置的方向是AspNetDevelopmentServerHost。当然,最好不要硬编码它们,但推荐的环境变量并不一定是您站点所在的位置,在这种情况下也不是。

2个回答

29

VS拥有许多宏变量,可以从VS内部运行。其中一个可以给出解决方案的完整路径,称为$(SolutionDir)。然而,在Pre-build和Post-build事件中(以及我所知道的解决方案的MSBuild文件中)可以使用此变量,但这不是一个环境变量。如果您仔细想一下,就会发现无法有一个指向“当前解决方案路径”的(全局)环境变量,因为您可能会打开多个VS实例。

根据您的单元测试框架,您通常可以询问其执行上下文以获取当前目录。尽管如此,这可能无法提供解决方案路径...


即使当前的VS实例已更改,以匹配其设置为True,这也会破坏其他实例。我将尝试使用$(SolutionPath),单元测试在VS内运行,这可能是我需要的。 - Otis
运行得非常好,谢谢。你不知道是否有一种方法可以找出开发服务器的当前端口吗? - Otis
我通常查找这些宏的名称的方法是打开项目属性并转到“生成事件”选项卡。如果您这样做并单击任何一个编辑按钮,您将获得一个对话框,其中包括一个宏按钮。单击此按钮将为您提供项目可用的所有宏变量列表。我手头没有Web项目,所以无法为您查找,但我当前检查的类库中肯定没有端口号... - Mark Seemann
我刚想回来删除我的问题,因为测试过程会在测试方法指定的任何端口上启动一个新服务器;所以,我实际上不需要知道。无论如何,感谢您的回复! - Otis
环境变量可以在会话期间设置,因为它们实际上并不是全局的,只是被继承的。 - carlin.scott

5

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接