我有这个结构:
\
MySolution.sln
Directory.Build.props (1)
\src
Directory.Build.props (2-src)
\Project1
\Project2
\test
Directory.Build.props (2-test)
\Project1Tests
\Project2Tests
Run Code Online (Sandbox Code Playgroud)
我具有所有项目的通用属性(1),src项目的通用属性(2-src)和测试项目的通用属性(2-test)。
为了使(2-src)和(2-test)导入(1),根据仓库中的建议,我向其中每个添加了:
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props'))" />
Run Code Online (Sandbox Code Playgroud)
那是行不通的(我收到一个导入导致循环依赖的错误。)。所以我尝试了:
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '../'))" />
Run Code Online (Sandbox Code Playgroud)
由于同样的原因,这也不起作用。但这确实有效:
<Import Project="../Directory.Build.props" />
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用msbuild命令(它支持更深的目录结构),而不是硬编码的值。那可能吗?
为我工作,略有改进:
<PropertyGroup>
<ParentDirectoryBuildPropsPath>$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)..\'))</ParentDirectoryBuildPropsPath>
</PropertyGroup>
<ImportGroup>
<Import Project="$(ParentDirectoryBuildPropsPath)" />
</ImportGroup>
Run Code Online (Sandbox Code Playgroud)
当然,要相应地调整条件。
您可以使用当前文件的文件夹名称($(MSBuildThisFileDirectory))解决该问题:
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)..\'))" />
Run Code Online (Sandbox Code Playgroud)
这是必需的,因为相对路径被解释为相对于项目,因此仅用../作第二个参数将始终是“距csproj一个”,而不管此语句所在文件的位置。
| 归档时间: |
|
| 查看次数: |
675 次 |
| 最近记录: |