TFS 2018中Visual Studio Build任务指定DesktopPackageLocation项目名
解决TFS 2018中为每个.NET Core Web项目生成对应命名Zip包的问题
要实现每个Web项目生成匹配自身名称的Zip包,核心是利用MSBuild的内置动态属性替换固定文件名,让每个解决方案/项目构建时自动生成对应的包名。下面是具体的步骤和说明:
1. 修改MSBuild参数中的输出路径
你当前的DesktopBuildPackageLocation是固定值WebApp.zip,导致所有项目都输出到同一个文件。我们可以用MSBuild的内置属性$(SolutionName)来动态获取当前构建的解决方案名称,替换固定文件名:
将原MSBuild参数中的:
/p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\WebApp.zip"
修改为:
/p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\$(SolutionName).zip"
为什么这能生效?
当TFS的Visual Studio Build任务处理通配符\WebApp.*.sln时,会逐个构建每个匹配的解决方案。在每个解决方案的构建过程中,MSBuild的$(SolutionName)属性会自动被填充为当前解决方案的名称(比如WebApp.Prj1、WebApp.Prj2),这样每个构建输出的Zip包就会对应命名为WebApp.Prj1.zip、WebApp.Prj2.zip。
2. 特殊场景的调整(如果需要)
如果你的单个解决方案中包含多个Web项目,且需要为每个项目单独生成对应名称的Zip包,那么可以改用$(ProjectName)属性,并调整构建任务的目标项目:
- 将解决方案参数改为具体的项目文件(比如
**\WebApp.*.csproj),或者在MSBuild参数中添加/t:WebApp.Prj1;WebApp.Prj2指定要构建的项目 - 输出路径修改为:
/p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\$(ProjectName).zip"
3. 验证配置
修改完成后,触发一次构建,然后查看$(build.artifactstagingdirectory)目录下的输出文件:
- 每个解决方案对应的Zip包应该以解决方案名称命名,不会再出现覆盖或统一命名的问题
- 确认每个Zip包的内容是对应项目的正确发布文件
内容的提问来源于stack exchange,提问作者Arjay H.
相关产品推荐
相关产品推荐

