我正在尝试获得一次性昂贵的目标,仅在构建某个顶级项目(具有许多依赖项)时运行。
我从普通的msbuild /命令行构建中获得这个工作没有问题。 我通过项目中的设置和InitialTargets来执行此操作,或者使用
< BeforeBuild />。
棘手的部分是使用Visual Studio。当我从VS构建相同的项目时。 VS甚至在调用我的.csproj之前运行依赖项,因此我的目标(影响其他项目的构建方式)在它们已经构建之前不会运行。
在调用依赖项之前是否有某种程序迫使VS运行目标?
我目前正在努力解决这个问题,方法是使用以下方法从最低级别的项目中运行相同的高成本目标(得到的总是......)
条件=“$(BuildingInsideVisualStudio)”
有关如何“正确”完成此操作的任何想法? 再一次,我正在寻找一种适用于VS的解决方案。
答案 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更早做某事吗?