换句话说,我希望在整个构建会话的开始和结束时只调用一次此目标,而不是针对可能作为该会话的一部分构建的每个单独项目。
另一种说法是,当在 Visual Studio 中点击 Build (F7) 时,我想在构建的最开始和结束时调用我的自定义 Target,而不管构建了什么(以及它是否成功)。
这可能吗?如果没有,是否有使用 MSBuild 目标的替代方法,可以让我在每个 Visual Studio 构建的开始和结束时调用我的进程?
换句话说,我希望在整个构建会话的开始和结束时只调用一次此目标,而不是针对可能作为该会话的一部分构建的每个单独项目。
另一种说法是,当在 Visual Studio 中点击 Build (F7) 时,我想在构建的最开始和结束时调用我的自定义 Target,而不管构建了什么(以及它是否成功)。
这可能吗?如果没有,是否有使用 MSBuild 目标的替代方法,可以让我在每个 Visual Studio 构建的开始和结束时调用我的进程?
要执行解决方案范围的 Before 和 After 目标,您将在解决方案所在的文件夹中创建两个名为“after.<SolutionName>.sln.targets”和“before.<SolutionName>.sln.targets”的 MSBuild 项目文件。
要在所有解决方案上执行此操作,您需要将自定义解决方案级别的目标文件放到路径 $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportBefore\ 或 $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportAfter 中。构建这些解决方案后,它将导入这些文件夹中的所有项目文件(如果存在)。
要验证上述内容,请打开命令提示符并导航到包含您的解决方案文件的文件夹。键入“SET MSBuildEmitSolution=1”。然后运行 msbuild.exe <SolutionName>。您将看到 msbuild 已将元数据项目文件 <SolutionName>.sln.metaproj 和 <SolutionName>.sln.metaproj.tmp 保存在与您的解决方案相同的路径中。
查看文件顶部和底部的 <Import /> 声明,您会注意到条件导入,允许您在目标之前和之后声明特定于解决方案的目标,或在目标之前和之后声明特定于全局解决方案。
编辑:
看来这仅适用于命令行或团队构建,但不适用于 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:没有香蕉 :(