【问题标题】:How do I override the `BeforeBuild` msbuild task in a VS 2017 .NET Standard C# project?如何覆盖 VS 2017 .NET Standard C# 项目中的“BeforeBuild”msbuild 任务?
【发布时间】:2017-08-29 16:19:43
【问题描述】:

创建新的 .NET Standard 类库项目后,我想覆盖 BeforeBuild msbuild 任务。以前,我会卸载并编辑 .csproj 文件,然后只需按照说明 To modify your build process, add your task inside one of the targets below and uncomment it. 并将我的逻辑添加到那里的模板中。新的 .NET Standard 项目不包含此类说明。

在原来的位置简单地添加任务是没有效果的。检查项目目录下dotnet msbuild /pp run 的输出可以看出原因是没有效果。我添加的任务稍后在统一输出中重新声明,我假设它会覆盖我的任务,因为似乎没有检查任务是否已经存在。

我找到的 herehere 的文档没有涵盖项目文件的 msbuild 扩展。

【问题讨论】:

  • 是的!非常感谢,感谢 SO!
  • 您对创建目标或运行类似任务的命令感兴趣吗? (构建脚本之前/之后)。 VS 2017 的 15.3 更新有一个新的编辑器,可以自动添加正确连接的新目标。
  • @ChristopherKing,这个问题呢?请告诉我有关此问题的最新信息吗?
  • @Leo-MSFT,最后我尝试修复我得到一个 msbuild 警告说我双重导入了 sdk.propssdk.targets,它很可能是一个 authoring error。所以我猜即使我添加了显式导入,MS 仍然会执行隐式导入。在我能够在没有警告的情况下导入之前,我不会接受答案。你看到警告了吗?

标签: c# msbuild visual-studio-2017 .net-standard


【解决方案1】:

行为改变了。

<Project Sdk="Microsoft.NET.Sdk">
    ...
</Project>

扩展为

<Project>
    <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
    ...
    <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>

如果要覆盖BeforeBuild,则必须手动导入 Sdk 道具和目标,但不建议这样做。推荐的解决方案是使用BeforeTargets="Build" 创建一个目标。

编辑:这里有关于基于 Sdk 的项目的 BeforeBuildAfterBuild 的讨论:https://github.com/Microsoft/msbuild/issues/1680

【讨论】:

  • 第二个 Import 应该是“Sdk.targets”。更新了。
  • 谢谢。这是一个复制粘贴错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 2018-02-09
  • 2017-05-19
  • 1970-01-01
  • 2018-08-12
  • 2019-01-23
  • 1970-01-01
相关资源
最近更新 更多