好吧,我找到了解决方案。我对正在阅读的指南和构建过程缺乏了解,这意味着我没有提出正确的问题。
我在 .csproj 中指定了这个构建目标(如指南中所述):
<Target Name="NSwag" BeforeTargets="PrepareForBuild" Condition="'$(GenerateCode)'=='True' ">
<Exec Command="$(NSwagExe_Core22) run nswag.json /variables:Configuration=$(Configuration)" />
</Target>
这个目标针对我在标签中指定的每个目标框架运行。<TargetFrameworks>
这是与自身并行运行并导致我的问题出现错误的任务。
经过更多的谷歌搜索,我发现了这个问题和(因此是这个答案)这给了我需要的解决方案:
在我使用的多目标框架上,BeforeTargets="DispatchToInnerBuilds"
因此我的自定义命令仅在每次构建之前执行一次
所以我的最终构建目标就这么简单:
<Target Name="NSwag" BeforeTargets="DispatchToInnerBuilds" Condition="'$(GenerateCode)'=='True' ">
<Exec Command="$(NSwagExe_Core22) run nswag.json /variables:Configuration=$(Configuration)" />
</Target>
还应注意,此解决方案可能不适用于所有希望构建目标在每个构建中运行一次的人。请参阅此问题评论,该评论提供了类似的答案,但提供了有关多项目解决方案的更多详细信息。