为何MSBuild执行Publish时会在发布文件夹根目录生成额外的App.exe文件
为什么命令行MSBuild发布时根目录会多出EXE文件
这个差异的核心是Visual Studio和命令行MSBuild调用ClickOnce发布的加载逻辑不一样:
- VS2019执行发布时,会自动加载IDE内置的ClickOnce发布专属配置,
_DeploymentComputeClickOnceManifestInfo步骤会被限制仅将主EXE拷贝到Application Files下的版本子目录中,不会向发布根目录输出副本。 - 直接用命令行MSBuild调用解决方案级别的Publish目标时,默认没有加载这些IDE私有配置,该步骤会同时触发默认生成输出拷贝和ClickOnce清单生成的额外拷贝逻辑,最终导致根目录多出来重复的EXE文件。
让MSBuild发布行为和VS2019完全一致的方法
方法1:添加命令行参数
直接在你现有的MSBuild命令中新增2个发布参数即可:
& MSBuild -m AppSolution.sln /p:Configuration=Debug /t:publish /p:PublishDir="C:\projects\AppSolutionFolder\Publish\\" /p:WebPublishMethod=ClickOnce /p:GenerateAppxPackageOnBuild=False | Out-Default
如果调整后还是存在多余的EXE,可以再加一个参数禁用根目录拷贝逻辑:/p:CopyOutputSymbolsToPublishDirectory=false
方法2:修改项目配置永久生效
直接在对应项目的.csproj文件中添加以下自定义目标,会自动清理多余的根目录EXE:
<Target Name="DeleteDuplicateRootExe" AfterTargets="_DeploymentComputeClickOnceManifestInfo"> <Delete Files="$(PublishDir)$(TargetFileName)" /> </Target>
这个目标会在_DeploymentComputeClickOnceManifestInfo步骤执行完成后自动运行,删掉发布根目录下的重复EXE,最终输出的文件夹结构和VS发布的完全一致。
内容的提问来源于stack exchange,提问作者Bitfiddler
相关产品推荐
相关产品推荐

