Azure DevOps的VSBuild任务中如何指定待构建的具体项目?
错误原因
MSB4057报错的核心是解决方案级别调用VSBuild时,指定项目目标的语法不符合MSBuild规范,你所使用的/t:FPH_Api\FPH_Api_csproj;Rebuild属于错误写法。
解决方案
方案1(推荐):直接指定项目为构建目标
无需处理特殊字符替换,直接将VSBuild任务的solution参数指向你要打包的Web API项目文件即可,MSBuild会自动构建该项目的所有依赖项目,同时按配置生成打包文件。
对应YAML配置:
variables: solution: 'fph.sln' buildPlatform: 'Any CPU' buildConfiguration: 'Release' steps: - xxxx - task: VSBuild@1 inputs: # 直接指定Web API项目路径 solution: 'FPH.Api/FPH.Api.csproj' msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip"' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)'
方案2:解决方案级别指定项目构建目标
如果必须基于解决方案文件构建,需要按照MSBuild规则格式化目标参数:
- 项目路径中的
\替换为_ - 项目文件名中的
.替换为_ - 无需保留
.csproj后缀 - 目标参数格式为
/t:{替换后的项目名}:{目标}
你的项目FPH.Api\FPH.Api.csproj替换后对应名称为FPH_Api_FPH_Api,对应YAML配置:
variables: solution: 'fph.sln' buildPlatform: 'Any CPU' buildConfiguration: 'Release' steps: - xxxx - task: VSBuild@1 inputs: solution: '$(solution)' msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /t:FPH_Api_FPH_Api:Rebuild' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)'
注意事项
- 不要在目标参数中添加多余的
_csproj后缀,这是本次报错的直接原因 - 如果不确定项目替换后的名称,可在本地解决方案目录执行
msbuild /pp命令,在导出的预处理文件中搜索对应项目路径即可获取标准替换名称
内容的提问来源于stack exchange,提问作者daxu
相关产品推荐
相关产品推荐

