3

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

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

< 构建之前 />。

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

有没有办法在调用依赖项之前强制 VS 运行目标?

我目前正在解决这个问题,通过使用以下方式从我的最低级项目(始终构建的项目......)运行相同的昂贵目标:

条件="$(BuildingInsideVisualStudio)"

关于如何“正确”完成这项工作的任何想法?同样,我正在寻找一种适用于 VS 的解决方案。

4

3 回答 3

3

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

于 2010-04-30T01:13:29.320 回答
2

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

您将在 .csproj(或 .vbproj)文件中使用以下片段。

<PropertyGroup>
    <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>
</PropertyGroup>
于 2009-12-25T03:11:20.240 回答
1

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

除非你想在 msbuild 之前做一些事情?

于 2009-12-23T19:05:55.530 回答