2011-03-09 49 views
1

是否有一种通用的方法,可以获取生成后的事件以复制构建的程序集以及任何.config和任何.xml注释文件到一个文件夹(通常是相对的解决方案),而无需在解决方案中的每个项目上编写后生成事件?将构建的程序集(包括PDB,.config和XML注释文件)复制到文件夹发布版

目标是让文件夹包含整个解决方案的最后一次成功构建。

在多个解决方案上使用相同的构建解决方案也很好,可能会启用/禁用某些项目(所以不要复制单元测试等)。

感谢,
基隆

回答

3

您可以设置常用的OutputPath建设的所有项目SLN中的一个临时目录和所需文件复制到最新版本的文件夹。在复制操作中,您可以设置一个过滤器来复制其名称中没有“test”的所有dll。

msbuild.exe 1.sln /p:Configuration=Release;Platform=AnyCPU;OutputPath=..\latest-temp 

存在更复杂,更灵活的解决方案。您可以使用CustomAfterMicrosoftCommonTargets来设置构建过程的挂钩。例如,请参阅此post。 取样目标文件可以是这样的:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <BuildDependsOn> 
     $(BuildDependsOn); 
     PublishToLatest 
    </BuildDependsOn> 
    </PropertyGroup> 

    <Target Name="PreparePublishingToLatest"> 
    <PropertyGroup> 
     <TargetAssembly>$(TargetPath)</TargetAssembly> 
     <TargetAssemblyPdb>$(TargetDir)$(TargetName).pdb</TargetAssemblyPdb> 
     <TargetAssemblyXml>$(TargetDir)$(TargetName).xml</TargetAssemblyXml> 
     <TargetAssemblyConfig>$(TargetDir)$(TargetName).config</TargetAssemblyConfig> 
     <TargetAssemblyManifest>$(TargetDir)$(TargetName).manifest</TargetAssemblyManifest> 
     <IsTestAssembly>$(TargetName.ToUpper().Contains("TEST"))</IsTestAssembly> 
    </PropertyGroup> 
    <ItemGroup> 
     <PublishToLatestFiles Include="$(TargetAssembly)" Condition="Exists('$(TargetAssembly)')" /> 
     <PublishToLatestFiles Include="$(TargetAssemblyPdb)" Condition="Exists('$(TargetAssemblyPdb)')" /> 
     <PublishToLatestFiles Include="$(TargetAssemblyXml)" Condition="Exists('$(TargetAssemblyXml)')" /> 
     <PublishToLatestFiles Include="$(TargetAssemblyConfig)" Condition="Exists('$(TargetAssemblyConfig)')" /> 
     <PublishToLatestFiles Include="$(TargetAssemblyManifest)" Condition="Exists('$(TargetAssemblyManifest)')" /> 
    </ItemGroup> 
    </Target> 

    <Target Name="PublishToLatest" 
      Condition="Exists('$(LatestDir)') AND '$(IsTestAssembly)' == 'False' AND '@(PublishToLatestFiles)' != ''" 
      DependsOnTargets="PreparePublishingToLatest"> 

    <Copy SourceFiles="@(PublishToLatestFiles)" DestinationFolder="$(LatestDir)" SkipUnchangedFiles="true" /> 
    </Target> 
</Project> 

在这种目标的文件,你可以指定你想要的任何操作。

您可以将它放在这里“C:\ Program Files \ MSBuild \ v4.0 \ Custom.After.Microsoft.Common.targets”或这里“C:\ Program Files \ MSBuild \ 4.0 \ Microsoft.Common.targets \ ImportAfter \ PublishToLatest.targets”。

第三种变体是添加到您想要发布导入自定义目标的每个项目。见How to: Use the Same Target in Multiple Project Files

+0

这看起来的想法,我会给它一个去。谢谢! – Kieron 2011-03-09 15:55:20

+0

是的,我同意,设置OutputPath是推荐的方法。 – 2011-03-15 05:42:49

相关问题