【问题标题】:How can I invoke my MSBuild Target when msbuild.exe starts and when it ends如何在 msbuild.exe 启动和结束时调用我的 MSBuild 目标
【发布时间】:2023-03-03 21:43:02
【问题描述】:

换句话说,我希望在整个构建会话的开始和结束时只调用一次此目标,而不是针对可能作为该会话一部分构建的每个单独项目。

另一种说法是,当在 Visual Studio 中点击 Build (F7) 时,我想在构建的开始和结束时调用我的自定义 Target,而不管构建了什么(以及它是否成功)。

这可能吗?如果没有,是否有使用 MSBuild 目标的替代方法,可以让我在每个 Visual Studio 构建的开始和结束时调用我的进程?

【问题讨论】:

标签: visual-studio visual-studio-2012 msbuild


【解决方案1】:

要执行解决方案范围的 Before 和 After 目标,您将在与你的解决方案。

要对所有解决方案执行此操作,您需要将目标文件之后的自定义解决方案级别放到路径 $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportBefore\ 或 $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile \导入后。构建这些解决方案后,它将导入这些文件夹中的所有项目文件(如果存在)。

要验证上述内容,请打开命令提示符并导航到包含您的解决方案文件的文件夹。键入“SET MSBuildEmitSolution=1”。然后运行 ​​msbuild.exe 。您将看到 msbuild 已将元数据项目文件 .sln.metaproj 和 .sln.metaproj.tmp 保存在与您的解决方案相同的路径中。

查看文件顶部和底部的 声明,您会注意到条件导入,允许您在目标之前和之后声明特定于解决方案,或在目标之前和之后声明特定于全局解决方案。

编辑:

这似乎只适用于命令行或团队构建,但不适用于 Visual Studio。

我将此添加到我的 After.Solution.sln.targets 文件中:

<Target Name="Banana" AfterTargets="Build">
    <Message Text="*** BEGIN BANANA ***" Importance="high" />
    <Message Text=" _                                          " Importance="high" />
    <Message Text="//\                                         " Importance="high" />
    <Message Text="V  \                                        " Importance="high" />
    <Message Text=" \  \_                                      " Importance="high" />
    <Message Text="  \,'.`-.                                   " Importance="high" />
    <Message Text="   |\ `. `.                                 " Importance="high" />
    <Message Text="   ( \  `. `-.                        _,.-:\" Importance="high" />
    <Message Text="    \ \   `.  `-._             __..--' ,-';/" Importance="high" />
    <Message Text="     \ `.   `-.   `-..___..---'   _.--' ,'/ " Importance="high" />
    <Message Text="      `. `.    `-._        __..--'    ,' /  " Importance="high" />
    <Message Text="        `. `-_     ``--..''       _.-' ,'   " Importance="high" />
    <Message Text="          `-_ `-.___        __,--'   ,'     " Importance="high" />
    <Message Text="             `-.__  `----'''    __.-'       " Importance="high" />
    <Message Text="                  `--..____..--'            " Importance="high" />
    <Message Text="*** END BANANA ***"  Importance="high" />
</Target>

从命令行:香蕉!

在 TFS 构建中:香蕉!

Visual Studio:没有香蕉 :(

【讨论】:

  • 完整的内幕在这里:sedodream.com/2010/10/22/MSBuildExtendingTheSolutionBuild.aspx。了解解决方案级目标(构建、重建、清理和发布)也很重要,否则您无法触发任何自己的目标。
  • 其实这并没有给我我想要的。仅当您通过显式运行 MSBuild.exe 来构建 VS 解决方案时,它才有效。如果您在 Visual Studio 中选择 Build(或者按 F7),则不会使用这些目标文件之前和之后的文件。
  • 好吧……根据这篇文章,这些扩展点在 Visual Studio 中不可用:(connect.microsoft.com/VisualStudio/feedback/details/782934/…
  • 香蕉震撼了郊区!我的 msbuild proj 文件中的 ASCII 艺术,我为什么没有想到这一点????
  • 从未创建过目标文件,我需要最初的&lt;Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&gt; 行及其结束。为了完整起见,您可以将其添加到答案中。
猜你喜欢
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多