【发布时间】:2011-01-20 12:02:38
【问题描述】:
作为包含许多项目的解决方案的一部分,我有一个引用的项目(通过<ProjectReference> 解决方案中的其他三个项目,以及其他一些项目)。在AfterBuild 中,我需要将 3 个特定依赖项目的输出复制到另一个位置。
通过各种 SO 答案等,我决定完成的方式是:
<MSBuild
Projects="@(ProjectReference)"
Targets="Build"
BuildInParallel="true"
Condition="'%(Name)'=='ProjectA' OR '%(Name)'=='ProjectB' OR '%(Name)'=='ProjectC'">
<Output TaskParameter="TargetOutputs" ItemName="DependentAssemblies" />
</MSBuild>
<Copy SourceFiles="@(DependentAssemblies)" DestinationFolder="XX" SkipUnchangedFiles="true" />
但是,我遇到了这个问题。 <MSBuild 步骤的IncrementalClean 任务最终删除了ProjectC 的一些输出。在 VS2008 下运行此程序时,build.force 文件被存放在 ProjectC 的 obj/Debug 文件夹中,如果项目包含此 AfterBuild 目标,则如果我在整个解决方案上执行构建,则触发 ProjectC 重建,而如果一个排除这个项目从构建中,它[正确地] 不会触发 ProjectC 的重建(并且关键会重建 ProjectC 的所有依赖项)。在这种情况下,这可能是特定于 VS 的诡计,不会在 TeamBuild 或其他命令行 MSBuild 调用的上下文中发生(但最常见的用法是通过 VS,因此我需要以任何一种方式解决此问题)
相关项目(以及一般解决方案的其余部分)都已与 VS 交互创建,因此 ProjectRefences 包含相对路径等。我已经看到提到这可能会导致问题 - 但是没有完整解释原因、何时修复或如何解决它。换句话说,我对例如不感兴趣。通过手动编辑 .csproj 将 ProjectReference 路径转换为绝对路径。
虽然我完全有可能在做一些愚蠢的事情并且有人会立即指出它是什么(这很好),但请放心,我已经花了很多时间研究/v:diag 输出等(虽然我没有试图从头开始构建复制品 - 这是在相对复杂的整体构建的背景下)
【问题讨论】:
标签: msbuild msbuild-task project-reference