VS 是否有当前解决方案路径的环境变量?
比如有“%PathToWebRoot%”,一般设置在你的VS项目目录下的“WebSites”目录下。它的值可以通过多种方式进行更改。我想知道每次加载解决方案以指向它的根时是否有一个变量会发生变化。
我正在创建可能在不同机器上运行的单元测试,并且在方法之前必须设置的方向之一是 AspNetDevelopmentServerHost。当然,建议不要对它们进行硬编码,但推荐的环境变量不一定是您的站点所在的位置,在这种情况下也不是。
VS 是否有当前解决方案路径的环境变量?
比如有“%PathToWebRoot%”,一般设置在你的VS项目目录下的“WebSites”目录下。它的值可以通过多种方式进行更改。我想知道每次加载解决方案以指向它的根时是否有一个变量会发生变化。
我正在创建可能在不同机器上运行的单元测试,并且在方法之前必须设置的方向之一是 AspNetDevelopmentServerHost。当然,建议不要对它们进行硬编码,但推荐的环境变量不一定是您的站点所在的位置,在这种情况下也不是。
VS 有很多可以在VS中工作的宏变量。为您提供解决方案完整路径的方法称为$(SolutionDir)
. 但是,虽然这适用于构建前和构建后事件(以及解决方案的 MSBuild 文件中的 AFAIK),但这不是环境变量。如果您考虑一下,您不能有一个(全局)环境变量指向“当前解决方案的路径”,因为您可能打开了多个 VS 实例。
根据您的单元测试框架,您通常可以询问它的执行上下文以获取当前目录。不过,这可能不会为您提供解决方案……
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
我在每个解决方案中都将其引用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