是否有一种通用的方法,可以获取生成后的事件以复制构建的程序集以及任何.config和任何.xml注释文件到一个文件夹(通常是相对的解决方案),而无需在解决方案中的每个项目上编写后生成事件?将构建的程序集(包括PDB,.config和XML注释文件)复制到文件夹发布版
目标是让文件夹包含整个解决方案的最后一次成功构建。
在多个解决方案上使用相同的构建解决方案也很好,可能会启用/禁用某些项目(所以不要复制单元测试等)。
感谢,
基隆
是否有一种通用的方法,可以获取生成后的事件以复制构建的程序集以及任何.config和任何.xml注释文件到一个文件夹(通常是相对的解决方案),而无需在解决方案中的每个项目上编写后生成事件?将构建的程序集(包括PDB,.config和XML注释文件)复制到文件夹发布版
目标是让文件夹包含整个解决方案的最后一次成功构建。
在多个解决方案上使用相同的构建解决方案也很好,可能会启用/禁用某些项目(所以不要复制单元测试等)。
感谢,
基隆
您可以设置常用的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
这看起来的想法,我会给它一个去。谢谢! – Kieron 2011-03-09 15:55:20
是的,我同意,设置OutputPath是推荐的方法。 – 2011-03-15 05:42:49