我有一个需求,我需要在构建解决方案文件后压缩一些文件。在发布/调试模式下构建项目后,是否可以自动实现这一点?
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文件。
if $(ConfigurationName) == Release (powershell Compress-Archive -Path '$(TargetDir)*.dll', '$(TargetDir)*.pdb', '$(TargetDir)*.config' -DestinationPath '$(SolutionDir)PublishOutput\YourNameHere.zip' -Force)
-Force
v8wbuo2f2#
通常我不会把像创建zip文件,安装程序,NuGet包等东西放到我的实际项目中。为什么?因为当我把它放在那里时,每当我在Visual Studio中构建项目时,例如在调试时,它都会被执行。
但是zip文件、安装程序等只有在我发布时才需要,所以我不想每次在Visual Studio中按F5键时都等待它们重新生成。
为了发布,我通常创建一个批处理文件来执行MSBuild project file,它创建了发布所需的一切。创建ZIP文件的IMO也属于该MSBuild项目文件。您可以在我前面的两个答案中找到您需要的所有信息:
另外,here's an example MSBuild project file来自我的一个项目,它执行以下操作:
这种方法的好处是,我可以通过单击(运行一个批处理文件)来发布一个版本,其中包括我刚才列出的所有内容。创建所有这些东西需要一些时间,但由于它不是Visual Studio解决方案的一部分,所以它不会在每次我在Visual Studio中进行构建时运行-我只在真正需要它时才执行它。
5vf7fwbs3#
转到项目得属性,然后在“生成事件”选项卡得“后期生成事件”区域中编写命令.此处得命令得执行方式与Cmd批处理文件类似.另外:有一些“makros”可用,这可能有助于参考项目文件夹等。而且,要添加到Jason的注解中,还可以将批处理文件本身作为生成后命令进行调用。(One关于生成后事件警告:它们会在建置之后执行。但是如果您有CSC目的,它们会在建置之后以及建置后事件之后编译。如果您想要复制这些CSC目的的输出档,您需要在post-compile事件中执行。)
post-compile
6kkfgxo04#
这对我很有效:
if $(ConfigurationName) == Debug (powershell -Command "Get-ChildItem -Path '$(TargetDir)publish' -Recurse|Compress-Archive -DestinationPath '$(SolutionDir)PublishOutput\$(ProjectName)-$(ConfigurationName).zip' -Force")
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文件
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" />
6条答案
按热度按时间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文件。v8wbuo2f2#
通常我不会把像创建zip文件,安装程序,NuGet包等东西放到我的实际项目中。
为什么?因为当我把它放在那里时,每当我在Visual Studio中构建项目时,例如在调试时,它都会被执行。
但是zip文件、安装程序等只有在我发布时才需要,所以我不想每次在Visual Studio中按F5键时都等待它们重新生成。
为了发布,我通常创建一个批处理文件来执行MSBuild project file,它创建了发布所需的一切。
创建ZIP文件的IMO也属于该MSBuild项目文件。
您可以在我前面的两个答案中找到您需要的所有信息:
另外,here's an example MSBuild project file来自我的一个项目,它执行以下操作:
这种方法的好处是,我可以通过单击(运行一个批处理文件)来发布一个版本,其中包括我刚才列出的所有内容。
创建所有这些东西需要一些时间,但由于它不是Visual Studio解决方案的一部分,所以它不会在每次我在Visual Studio中进行构建时运行-我只在真正需要它时才执行它。
5vf7fwbs3#
转到项目得属性,然后在“生成事件”选项卡得“后期生成事件”区域中编写命令.此处得命令得执行方式与Cmd批处理文件类似.
另外:有一些“makros”可用,这可能有助于参考项目文件夹等。
而且,要添加到Jason的注解中,还可以将批处理文件本身作为生成后命令进行调用。
(One关于生成后事件警告:它们会在建置之后执行。但是如果您有CSC目的,它们会在建置之后以及建置后事件之后编译。如果您想要复制这些CSC目的的输出档,您需要在
post-compile
事件中执行。)6kkfgxo04#
这对我很有效:
apeeds0o5#
1.右键单击项目=〉选择属性
1.单击构建事件
1.在后期生成事件命令行中添加以下代码
1.它将生成“bin/release”文件夹中所有.dll的zip文件
5w9g7ksd6#
我无法让构建事件工作,所以我修改了MS构建配置文件-*.csproj文件。它实际上不是黑魔法,MS在这里记录了它:https://learn.microsoft.com/en-us/visualstudio/msbuild/build-process-overview?view=vs-2022
您必须在VS中卸载项目,修改 *.csproj档案(VS会在您卸载项目时自动载入),然后从[方案总管]重新载入项目。
下面是从Build目标中截取的(在本例中,它只压缩应用程序文件):
MS Build的这个Zip“任务”似乎比PowerShell压缩功能快得多。
以下是可用的MS Build“任务”列表:
https://learn.microsoft.com/en-us/visualstudio/msbuild/msbuild-task-reference?view=vs-2022
还有一个MS Build任务,它将压缩包括子目录在内的整个目录,如下所示: