MSBuild:如何在Directory.Build.props中获取项目SDK版本(TargetFramework)
解决自定义OutDir时包含TargetFramework的问题
直接在OutDir属性中引入$(TargetFramework)变量即可,但需注意Directory.Build.props的加载时机——它默认在项目自身属性之前执行,此时$(TargetFramework)可能还未被SDK初始化完成,因此有两种稳妥的实现方式:
方案1:改用Directory.Build.targets
将OutDir配置移至Directory.Build.targets文件(该文件在项目属性加载完成后执行,能确保$(TargetFramework)已被正确赋值):
<Project> <PropertyGroup> <OutDir>$(SolutionDir)/builds/$(MSBuildProjectName)/bin/$(Configuration)/$(TargetFramework)/</OutDir> </PropertyGroup> </Project>
方案2:在Directory.Build.props中延迟求值
通过MSBuild的延迟语法,确保$(TargetFramework)已初始化后再拼接路径:
<Project> <PropertyGroup> <OutDir>$(SolutionDir)/builds/$(MSBuildProjectName)/bin/$(Configuration)/$([MSBuild]::EnsureTrailingSlash('$(TargetFramework)'))</OutDir> </PropertyGroup> </Project>
效果验证
配置完成后,输出目录会自动包含TargetFramework版本,最终路径与预期一致:
solution/builds/proj/bin/Debug/net8.0/
内容的提问来源于stack exchange,提问作者dev01
相关产品推荐
相关产品推荐

