2009-06-24 150 views
7

VS对当前解决方案的路径是否有环境变量?Visual Studio Solution Path环境变量

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

我创建的单元测试可能会在不同的机器上运行,并且您必须在方法为AspNetDevelopmentServerHost之前设置其中一个方向。当然,建议不要对它们进行硬编码,但建议的环境变量不一定在您的网站所在的位置,也不在此例中。

回答

13

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

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

+0

真,即使VS的当前实例改变它来搭配它的设置,这会搞砸任何其他实例。我会尝试$(SolutionPath),单元测试从VS内部运行,这可能是我需要的。 – Otis 2009-06-25 13:01:02

5

Visual Studio确实为解决方案路径公开了一个环境变量 - 它被称为SolutionPath。它看起来像这样:

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

重要的是,你可以用它在任何过程中从Visual Studio衍生出 - 例如,从您的解决方案推出批处理脚本(这就是它可以跨Visual Studio中的不同情况不同)。

如果您将Visual Studio配置为通过双击this guide来启动.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