MSBuild:在Visual Studio中构建解决方案后运行目标

时间:2015-04-19 06:49:19

标签: visual-studio msbuild msbuild-task

我们有一个包含多个项目的解决方案,需要在编译完所有代码后在我们编译的代码上运行一个工具。该工具必须作为输入,从解决方案构建所有.dll和.exe文件(因此对于增量构建,仅仅为其提供刚刚重建的二进制文件是不够的),并且所有这些二进制文件必须达到日期。

现在我们使用MSBuild .proj文件执行此操作,该文件从命令行运行,该命令行包含所有项目并使用MSBuild的Output元素查找解决方案中二进制文件的路径。

这有两个问题使得这个解决方案不能满足我们的需要。该工具不需要实际在所有项目上运行,只需要在其中一些项目上运行。并且它要求我们能够在Visual Studio中构建。

似乎我需要的是,在某些项目中' .csproj文件,用于定义一些内容,说明"运行我的工具",以收集这些项目的路径,并在该路径集合上运行该工具。

但我无法看到如何做到这一点。看起来当我从Visual Studio构建时,我无法在项目构建之间共享状态,并且在解决方案构建之后看起来没有钩子。

从命令行开始,有。*。sln.targets和。*。sln.targets之后,但这些在Visual Studio中不起作用。

看起来我想要的只是荒谬简单,我只想要一个工具在构建后自动查看解决方案的二进制文件,所以我认为这不应该是不可能的。但我无法从文档中看到如何做到这一点。我是MSBuild的新手,所以我可能遗漏了一些明显的东西。

1 个答案:

答案 0 :(得分:4)

Msbuild具有可扩展性目标。这些空目标可以在项目文件中使用。请参阅following article and section Build process extensibility points

  

例如,如果您想要部署一些相关文件   汇编一旦构建,就覆盖AfterBuild目标   要走的路,如下图所示。

我将他们的示例更改为使用exec任务,如下所示。此示例在构建二进制文件后使用YourCustomTasks.exe。

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <!-- Properties and items are deleted for clarity -->
    <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
    <ItemGroup>
        <Binaries Include="*.dll;*.exe"/>
    </ItemGroup>
    <Target Name="AfterBuild">
        <Exec Command="YourCustomTasks.exe %(Binaries.Identity)" />
    </Target>
</Project>

如果您希望目标在解决方案后工作,请使用following answer

  

要执行解决方案范围的Before和After目标,您需要创建   两个名为“after..sln.targets”的MSBuild项目文件   “before..sln.targets”与你的文件夹在同一个文件夹中   溶液