.net 什么';s的目的<;SolutionDir>;.csproj文件中的元素?

.net 什么';s的目的<;SolutionDir>;.csproj文件中的元素?,.net,build,msbuild,projects-and-solutions,.net,Build,Msbuild,Projects And Solutions,我的.csproj文件包含以下声明: <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> ... <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</Solutio

我的
.csproj
文件包含以下声明:

  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     ...
    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
  </PropertyGroup>

调试
...
..\

我的期望是,当您直接从项目目录构建项目时,需要发现解决方案文件,并且不指定
/p:SolutionDir=
参数。但是,
。\
不会自动解析为绝对路径,因此,如果您具有与解决方案相关的依赖项,则该路径将无效。

这似乎是添加到项目文件中的,以允许独立于解决方案文件构建csproj文件,如果未将
SolutionDir
属性设置为正确的值(如果调用
msbuild my.sln
,而不是在执行
msbuild my.csproj
时,则会出现这种情况)

我假设csproj文件(或导入的props/targets文件)中的某些其他构建逻辑在某个地方使用了
$(SolutionDir)
,因此如果不使用此条件声明设置属性,它将失败

MSBuild解释相对于csproj文件的路径,并通过将工作目录设置为csproj文件的位置来执行所有命令,因此
。\
应该在几乎所有用例中都有效