.csproj文件中的<SolutionDir>元素有什么作用?

3

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

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

我的期望是,如果你从项目目录直接构建项目,并且没有指定/p:SolutionDir=参数,它需要发现解决方案文件。然而,..\不会自动解析为绝对路径,因此如果你有与解决方案相关的依赖项,则无用。

1个回答

5
看起来这是为了让csproj文件独立于解决方案文件构建而添加到您的项目文件中的,通过设置SolutionDir属性(如果它还没有设置正确的值)(如果您调用msbuild my.sln但执行msbuild my.csproj时不是这种情况)。

我假设您的csproj文件(或导入的props/targets文件)中的一些其他构建逻辑在某个地方使用了$(SolutionDir),因此,如果没有使用这个条件声明设置该属性,则会失败。
MSBuild将路径解释为相对于csproj文件,并通过将工作目录设置为csproj文件的位置来执行所有命令,因此..\几乎在所有情况下都可以使用。

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