如果您對@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