我试图为大量项目设置AppendTargetFrameworkToOutputPath
,但取决于TargetFramework。
基本上我有
<PropertyGroup Condition="'$(TargetFramework)'=='net48'">
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>
,我必须弄清楚把它放在哪里,这样我就不必在所有项目中重复代码。
到目前为止我发现了什么:
Directory.Build.props
:如果我不指定条件(Condition="'$(TargetFramework)'=='net48'"
),它可靠地工作。如果我限制它只有一个特定的TargetFramework,那么它只工作,如果项目是多目标。例如,<TargetFrameworks>net48;net5.0</TargetFrameworks>
工作得很好,但对于<TargetFramework>net48</TargetFramework>
,条件评估为假-自构建以来并不太令人惊讶。在csproj中设置TargetFramework之前对props文件进行评估(考虑到它是如何实现的,多目标工作也不太奇怪)。
Directory.Build.targets
:虽然这将解决在csproj中未设置TargetFramework的问题,但在评估过程中似乎太晚了,输出路径已经设置。
除了要求所有项目使用<TargetFrameworks>
之外,还有什么方法可以解决这个问题吗?(这将是一个非常脆弱的解决方案)。
请注意,这不是重复的,因为用户在csproj中手动导入公共文件,这使您可以更好地控制何时导入定义。
您可以使用<BeforeTargetFrameworkInferenceTargets>
属性来指定在构建过程中正确时间执行的目标文件的路径。