Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio MSBuild:从Visual Studio中生成解决方案后运行目标_Visual Studio_Msbuild_Msbuild Task - Fatal编程技术网

Visual studio MSBuild:从Visual Studio中生成解决方案后运行目标

Visual studio MSBuild:从Visual Studio中生成解决方案后运行目标,visual-studio,msbuild,msbuild-task,Visual Studio,Msbuild,Msbuild Task,我们有一个包含多个项目的解决方案,在编译完所有代码后,需要在编译后的代码上运行一个工具。该工具必须将从解决方案生成的所有.dll和.exe文件作为输入(因此,对于增量生成,仅提供刚重建的二进制文件是不够的),并且所有这些二进制文件必须是最新的 现在,我们使用从a命令行运行的MSBuild.proj文件执行此操作,该文件包含所有项目,并使用MSBuild的输出元素查找解决方案中二进制文件的路径 这有两个问题使得这个解决方案不太符合我们的需要。该工具实际上不需要在所有项目上运行,只需要在其中的一些项

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

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

这有两个问题使得这个解决方案不太符合我们的需要。该工具实际上不需要在所有项目上运行,只需要在其中的一些项目上运行。我们需要能够在VisualStudio中进行构建

似乎我需要的是,在一些项目的.csproj文件中,定义一些“在我身上运行工具”,收集这些项目的路径,并在这些路径集合上运行工具

但我不知道该怎么做。看起来,当我从VisualStudio构建时,我无法在项目构建之间共享状态,而且在解决方案构建之后似乎没有钩子

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


看起来我想要的是非常简单的,我只是想要一个工具在构建后自动查看解决方案的二进制文件,所以我不认为这是不可能的。但从文档中我看不出如何做到这一点。我不熟悉MSBuild,因此可能缺少一些明显的东西。

MSBuild有扩展性目标。这些空目标可以在项目文件中使用。看

例如,如果您想在 程序集一旦构建,覆盖后构建目标将是 要走的路,如下所示

我将他们的示例更改为使用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>

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

要在目标前后执行解决方案,您需要创建 两个名为“..sln.targets之后”的MSBuild项目文件和 “before..sln.targets”与您的 解决方案


但这将为每个已构建的项目运行一次,而不是在所有项目都已构建之后运行一次。@GalaxyInvader更新了我的答案。但这似乎在VisualStudio中不起作用。但是,您可以尝试其他解决方案级别的目标,看看它们是否适合您。关于您的编辑:我在帖子中特别提到,before/after.*.sln.targets在Visual Studio中不起作用,这也在您链接到的答案的评论中说明了…@GalaxyInvader我错过了这一部分。@AtillaOzgur您可能没有解决他的问题,但今天您解决了我的问题,谢谢您可以在解决方案中添加一个空项目,添加对其他项目的依赖关系,并在添加的项目中定义生成后事件。