VS是否有环境变量用于当前解决方案的路径?
例如,存在“%PathToWebRoot%”,它通常设置为VS项目目录中的“WebSites”目录。它的价值可以通过多种方式改变。我想知道每次加载解决方案以指向它的根时是否有变量都会发生变化。
我正在创建可能在不同机器上运行的单元测试,以及在方法是AspNetDevelopmentServerHost之前必须设置的方向之一。当然,建议不要对它们进行硬编码,但建议的环境变量不一定是您网站的位置,也不是这种情况。
答案 0 :(得分:16)
VS有许多宏变量可以在 VS中的中运行。为您提供解决方案完整路径的那个称为$(SolutionDir)
。但是,虽然这适用于构建前和构建后事件(以及AFAIK,在解决方案的MSBuild文件中),但这不是环境变量。如果你想一想,你不能有一个(全局)环境变量指向“当前解决方案的路径”,因为你可能有多个VS实例打开。
根据您的单元测试框架,您可以经常询问其执行上下文以获取当前目录。这可能不会给你解决方案路径,但是......
答案 1 :(得分:5)
Visual Studio确实公开了解决方案路径的环境变量 - 它被称为SolutionPath
。它看起来像这样:
SolutionPath=D:\Team\MyProject\main-branch\MyProject.sln
重要的是,您可以在从Visual Studio中生成的任何进程中使用它 - 例如,从您的解决方案启动批处理脚本(在不同的Visual Studio实例中它们的不同之处)。
如果您通过按this guide双击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