在Visual Studio中生成完成后压缩文件

ejk8hzay  于 2022-11-17  发布在  其他
关注(0)|答案(6)|浏览(300)

我有一个需求,我需要在构建解决方案文件后压缩一些文件。
在发布/调试模式下构建项目后,是否可以自动实现这一点?

7y4bm7vi

7y4bm7vi1#

使用powershell,仅在进行发布构建时:
if $(ConfigurationName) == Release (powershell Compress-Archive -Path '$(TargetDir)*.dll', '$(TargetDir)*.pdb', '$(TargetDir)*.config' -DestinationPath '$(SolutionDir)PublishOutput\YourNameHere.zip' -Force)
它只压缩dll、pdb和config文件。
-Force用于在每次构建时覆盖zip文件。

v8wbuo2f

v8wbuo2f2#

通常我不会把像创建zip文件,安装程序,NuGet包等东西放到我的实际项目中。
为什么?因为当我把它放在那里时,每当我在Visual Studio中构建项目时,例如在调试时,它都会被执行。

但是zip文件、安装程序等只有在我发布时才需要,所以我不想每次在Visual Studio中按F5键时都等待它们重新生成。

为了发布,我通常创建一个批处理文件来执行MSBuild project file,它创建了发布所需的一切。
创建ZIP文件的IMO也属于该MSBuild项目文件。
您可以在我前面的两个答案中找到您需要的所有信息:

另外,here's an example MSBuild project file来自我的一个项目,它执行以下操作:

  • 构建项目
  • 运行单元测试
  • 创建两个包含二进制文件(一个DLL和一个.exe)发布文件夹
  • 创建两个zip文件,每个文件夹对应一个二进制文件
  • 为DLL创建NuGet包
  • 为.exe创建ClickOnce安装程序
  • 自动为所有内容设置正确的版本号

这种方法的好处是,我可以通过单击(运行一个批处理文件)来发布一个版本,其中包括我刚才列出的所有内容。
创建所有这些东西需要一些时间,但由于它不是Visual Studio解决方案的一部分,所以它不会在每次我在Visual Studio中进行构建时运行-我只在真正需要它时才执行它。

5vf7fwbs

5vf7fwbs3#

转到项目得属性,然后在“生成事件”选项卡得“后期生成事件”区域中编写命令.此处得命令得执行方式与Cmd批处理文件类似.
另外:有一些“makros”可用,这可能有助于参考项目文件夹等。
而且,要添加到Jason的注解中,还可以将批处理文件本身作为生成后命令进行调用。
(One关于生成后事件警告:它们会在建置之后执行。但是如果您有CSC目的,它们会在建置之后以及建置后事件之后编译。如果您想要复制这些CSC目的的输出档,您需要在post-compile事件中执行。)

6kkfgxo0

6kkfgxo04#

这对我很有效:

if $(ConfigurationName) == Debug (powershell -Command "Get-ChildItem -Path '$(TargetDir)publish' -Recurse|Compress-Archive -DestinationPath '$(SolutionDir)PublishOutput\$(ProjectName)-$(ConfigurationName).zip' -Force")
apeeds0o

apeeds0o5#

1.右键单击项目=〉选择属性
1.单击构建事件
1.在后期生成事件命令行中添加以下代码

if exist $(AssemblyName).zip (  Del $(AssemblyName).zip)
powershell.exe -command Compress-Archive -Path $(AssemblyName).dll, *dll -DestinationPath $(AssemblyName).zip

1.它将生成“bin/release”文件夹中所有.dll的zip文件

5w9g7ksd

5w9g7ksd6#

我无法让构建事件工作,所以我修改了MS构建配置文件-*.csproj文件。它实际上不是黑魔法,MS在这里记录了它:https://learn.microsoft.com/en-us/visualstudio/msbuild/build-process-overview?view=vs-2022
您必须在VS中卸载项目,修改 *.csproj档案(VS会在您卸载项目时自动载入),然后从[方案总管]重新载入项目。
下面是从Build目标中截取的(在本例中,它只压缩应用程序文件):

<Target Name="Build">
  <CreateItem Include="app\**">
    <Output ItemName="ApplicationFiles" TaskParameter="Include" />
  </CreateItem>
  <Zip ZipFileName="out\$(AssemblyName).zip" WorkingDirectory="$(MSBuildProjectDirectory)\app" Files="@(ApplicationFiles)" />
</Target>

MS Build的这个Zip“任务”似乎比PowerShell压缩功能快得多。
以下是可用的MS Build“任务”列表:
https://learn.microsoft.com/en-us/visualstudio/msbuild/msbuild-task-reference?view=vs-2022
还有一个MS Build任务,它将压缩包括子目录在内的整个目录,如下所示:

<ZipDirectory SourceDirectory="dist" DestinationFile="out\$(AssemblyName).zip" />

相关问题