我有这个结构:
\
MySolution.sln
Directory.Build.props (1)
\src
Directory.Build.props (2-src)
\Project1
\Project2
\test
Directory.Build.props (2-test)
\Project1Tests
\Project2Tests
我有所有项目的公共属性(1),src项目的公共属性(2-src),以及测试项目的公共属性(2-test)。
对于(2-src)和(2-test)导入(1),根据advice given at the repo,我添加到每个人:
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props'))" />
这不起作用(我得到一个导致导致循环依赖的错误。)。所以我试过了:
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '../'))" />
出于同样的原因,它也不起作用。但这确实有效:
<Import Project="../Directory.Build.props" />
我更喜欢使用msbuild命令(支持更深层的目录结构),而不是硬编码值。这可能吗?
答案 0 :(得分:4)
您可以使用当前文件($(MSBuildThisFileDirectory)
)的文件夹名称来处理它:
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)..\'))" />
这是必需的,因为相对路径被解释为相对于项目,所以只使用../
,因为第二个参数总是#34;一个来自csproj&#34;文件无论此语句所在的文件位置如何。
答案 1 :(得分:0)
为我工作,但有一点改进:
<PropertyGroup>
<ParentDirectoryBuildPropsPath>$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)..\'))</ParentDirectoryBuildPropsPath>
</PropertyGroup>
<ImportGroup>
<Import Project="$(ParentDirectoryBuildPropsPath)" />
</ImportGroup>
当然,条件。