【发布时间】:2014-05-07 17:58:04
【问题描述】:
我有一个需求,我需要在构建解决方案文件后压缩一些文件。
在发布/调试模式下构建项目后,这是否可以自动实现?
【问题讨论】:
标签: c# visual-studio visual-studio-2012 msbuild
我有一个需求,我需要在构建解决方案文件后压缩一些文件。
在发布/调试模式下构建项目后,这是否可以自动实现?
【问题讨论】:
标签: c# visual-studio visual-studio-2012 msbuild
仅在发布版本时使用 powershell:if $(ConfigurationName) == Release (powershell Compress-Archive -Path '$(TargetDir)*.dll', '$(TargetDir)*.pdb', '$(TargetDir)*.config' -DestinationPath '$(SolutionDir)PublishOutput\YourNameHere.zip' -Force)
它只压缩 dll、pdb 和配置文件。-Force 用于在每次构建时覆盖 zip 文件。
【讨论】:
通常我不会将创建 zip 文件、安装程序、NuGet 包等内容放入我的实际项目中。
为什么?因为当我把它放在那里时,它会被执行每次我在 Visual Studio 中构建项目,例如在调试时。
但是 zip 文件、安装程序等仅在发布时才需要,因此我不想等待每次在 Visual Studio 中按 F5 时重新生成它们。
为了发布,我通常会创建一个批处理文件来执行 MSBuild project file,它会创建发布所需的所有内容。
IMO 创建 ZIP 文件也属于该 MSBuild 项目文件。
您可以在我之前的这两个答案中找到您需要的所有信息:
另外,here's an example MSBuild project file 来自我的一个项目,它执行以下操作:
这种方法的好处是我可以通过单击(运行批处理文件)来发布,其中包括我刚刚列出的所有内容。
创建所有这些东西需要一些时间,但由于它不是 Visual Studio 解决方案的一部分,所以每次我在 Visual Studio 中构建时它都不会运行 - 我只在真正需要时执行它。
【讨论】:
转到项目的属性,然后在“构建事件”选项卡中的“构建后”事件区域中写入您的命令。那里的命令就像(或作为)一个 Cmd 批处理文件一样执行。
另外:那里有一些“makros”可用,这可能有助于参考项目文件夹等。检查一下。
而且,要添加到 Jason 的评论中,您还可以将批处理文件本身称为构建后命令。
(关于构建后事件的一个警告:它们在构建之后执行。但如果您有 CSC 目标,它们将在构建之后编译和在构建后事件之后。如果您想例如复制这些 CSC 目标的输出文件,您需要在 post-compile 事件中执行此操作。)
【讨论】:
Compress-Archive 命令为您提供压缩功能。可以从构建事件启动 PowerShell 脚本。
这对我有用:
if $(ConfigurationName) == Debug (powershell -Command "Get-ChildItem -Path '$(TargetDir)publish' -Recurse|Compress-Archive -DestinationPath '$(SolutionDir)PublishOutput\$(ProjectName)-$(ConfigurationName).zip' -Force")
【讨论】:
右击项目=>选择属性
点击构建事件
在构建后事件命令行中添加以下代码
if exist $(AssemblyName).zip ( Del $(AssemblyName).zip)
powershell.exe -command Compress-Archive -Path $(AssemblyName).dll, *dll -DestinationPath $(AssemblyName).zip
它将在“bin/release”文件夹中生成所有.dll的zip文件
【讨论】: