VSTS发布工件为空:ASP.Net MVC本地部署问题求助
解决ASP.NET MVC应用构建后工件为空/文件嵌套过深问题
先说说你最开始碰到的空工件问题
你之前构建成功但工件文件夹空空如也,核心原因是默认的MSBuild任务没把MVC应用的发布产物输出到$(build.artifactstagingdirectory)这个指定目录。你后来加上的MSBuild参数已经找对路子了,不过咱们可以优化一下,直接解决文件深层嵌套的麻烦。
方案一:直接输出扁平化的发布文件(推荐)
如果你不想生成压缩包,只需要把参数里的PackageAsSingleFile=true改成PackageAsSingleFile=false就行。这样MSBuild会直接把所有发布文件输出到工件目录里,不会打包成zip,自然就没了深层嵌套的问题。调整后的完整参数:
/t:My_MVCWeb_Project_Name /p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:PackageAsSingleFile=false /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"
构建完成后,$(build.artifactstagingdirectory)里就直接是你的MVC应用发布文件,后续本地代理的copy_files任务可以直接把这些文件复制到UNC路径,省了解压的额外步骤。
方案二:保留压缩包,添加解压任务处理嵌套
要是你因为某些需求必须保留压缩包输出,那就在构建任务之后加一个Extract Files任务,把生成的zip包解压到工件目录根目录:
- 任务类型选择「Extract Files」
- 「Archive file patterns」填写
$(build.artifactstagingdirectory)\*.zip - 「Destination folder」设置为
$(build.artifactstagingdirectory) - 按需勾选「Overwrite existing files」(需要覆盖旧文件时启用)
解压完成后,文件就会直接放在工件目录里,后续的复制任务就能正常读取了。
几个额外要注意的细节
- 确认你MSBuild参数里的
My_MVCWeb_Project_Name是解决方案里正确的MVC项目名称,最好带上.csproj后缀(比如My_MVCWeb_Project_Name.csproj),避免因为项目名称匹配错误导致没生成产物。 - 可以查看构建日志里MSBuild的输出路径,确认文件确实输出到了
$(build.artifactstagingdirectory),如果路径有问题,试试把PackageLocation的末尾反斜杠去掉,改成$(build.artifactstagingdirectory)
内容的提问来源于stack exchange,提问作者bitshift
相关产品推荐
相关产品推荐

