从Visual Studio构建时,在运行任何其他内容之前使目标运行

时间:2009-12-23 18:56:56

标签: visual-studio-2008 msbuild dependencies target

我正在尝试获得一次性昂贵的目标,仅在构建某个顶级项目(具有许多依赖项)时运行。

我从普通的msbuild /命令行构建中获得这个工作没有问题。 我通过项目中的设置和InitialTargets来执行此操作,或者使用

  

< BeforeBuild />。

棘手的部分是使用Visual Studio。当我从VS构建相同的项目时。 VS甚至在调用我的.csproj之前运行依赖项,因此我的目标(影响其他项目的构建方式)在它们已经构建之前不会运行。

在调用依赖项之前是否有某种程序迫使VS运行目标?

我目前正在努力解决这个问题,方法是使用以下方法从最低级别的项目中运行相同的高成本目标(得到的总是......)

  

条件=“$(BuildingInsideVisualStudio)”

有关如何“正确”完成此操作的任何想法? 再一次,我正在寻找一种适用于VS的解决方案。

3 个答案:

答案 0 :(得分:3)

执行此操作的唯一方法(如果我理解这个问题)是创建一个虚拟项目,您告诉VS首先构建,它可以执行您想要的任何操作。如果你给它一个.csproj扩展名和Build目标,VS将接受几乎任何MSBuild文件。

答案 1 :(得分:2)

Visual Studio使用in proc编译器来帮助构建过程的UX。由于这一点,VS和MSBuild之间可能存在一些差异。尝试在项目文件中将属性UseHostCompilerIfAvailable设置为false。这将迫使VS使用MSBuild进行构建。缺点是Visual Studio内部的性能。

您可以在.csproj(或.vbproj)文件中使用以下内容。

<PropertyGroup>
    <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>
</PropertyGroup>

答案 2 :(得分:1)

为什么不覆盖<Target Name="BeforeBuild" />目标?这将在项目的实际构建之前执行(因为Build目标取决于BeforeBuild)。 Visual Studio正在调用Build目标(或Rebuild),因此覆盖.csproj中的目标将导致首先调用它。

除非你想要比msbuild更早做某事吗?