如果您对@Filburt回答满意,我可以建议改进此解决方案。
如果默认构建目标是如何工作的,你会看一看:
<Target
Name="Build"
Condition=" '$(_InvalidConfigurationWarning)' != 'true' "
DependsOnTargets="$(BuildDependsOn)"
Returns="$(TargetPath)" />
你会看到,从生成唯一的输出或重建目标$(TARGETPATH)。 $(TargetPath)是构建程序集的完整路径。要改变这种行为,你可以破解构建过程。但是,这将是搭配简单定义自己的目标项目乙:
<Target
Name="BuildWithConfig"
DependsOnTargets="Clean;Build"
Returns="$(TargetPath);$(TargetPath).config" />
在一个项目只是定义AfterBuild目标:
<Target Name="AfterBuild">
<MSBuild Projects="Executable_B.proj" Targets="BuildWithConfig">
<Output TaskParameter="TargetOutputs" ItemName="AssembliesBuilt" />
</MSBuild>
<Copy SourceFiles="@(AssembliesBuilt)" DestinationFolder="$(OutDir)\SubDirForB" SkipUnchangedFiles="true" />
</Target>
此解决方案不要求对创建自定义构建脚本。你会直接在VS中得到结果。
Eh Filburt,我刚刚尝试了这个解决方案,这正是我所期待的!但是,不会复制Executable_B的app.config(和其他依赖项)。任何想法为什么? – Martin 2010-12-15 01:38:19
@Martin呵呵......老实说,我得自己看看。 TargetOutputs只抓取项目本身实际构建的内容。你也可能想要省略SkipUnchangedFiles。只要找到正确的输出参数,我就会更新我的答案。 – Filburt 2010-12-15 07:33:35
我还没有找到解决方案。任何想法? – Martin 2010-12-22 03:23:07