You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Framework 4.8 Web Form应用Azure DevOps CI/CD未生成bin文件夹

.NET Framework 4.8 Web Form应用Azure DevOps部署后运行时缺失DLL问题

问题概述

  • 基于.NET Framework 4.8的遗留Web Form应用,Azure DevOps构建、发布流水线运行成功且应用已部署,但加载时提示找不到所需DLL文件。
  • Visual Studio本地构建时,项目bin文件夹可正常生成;但Azure DevOps执行构建/发布命令时未生成该文件夹。
  • 已确认DLL对应的NuGet包通过nuget restore命令完成还原,包源包含nuget.org和Azure集中式工件源。

流水线关键细节

构建任务

使用VS Build任务,核心参数包含DeployOnBuild=true、WebPublishMethod=Package、PackageAsSingleFile=true等,完整命令行参数见下方构建日志。

发布任务

  • 采用虚拟机代理的部署组作业;
  • 已配置复制命令将源目录文件复制到暂存目录;
  • 通过文件共享发布工件。

构建日志(中文翻译)

构建开始于 2023/7/12 12:16:28 PM。
日志详细级别设置为:详细。
进程 = "H:\Program Files\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\msbuild.exe"
MSBuild可执行文件路径 = "H:\Program Files\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\msbuild.exe"
命令行参数 = ""H:\Program Files\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\msbuild.exe"  "C:\agents\_work\14\s\BPS.sln" /nologo /nr:false /fl /flp:"logfile=C:\agents\_work\14\s\BPS.sln.log;verbosity=detailed" /dl:CentralLogger,"C:\agents\_work\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda\1.151.2\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll";"RootDetailId=a04548bd-5502-4326-80b0-1a4339df8a85|SolutionDir=C:\agents\_work\14\s"*ForwardingLogger,"C:\agents\_work\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda\1.151.2\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll" /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="C:\agents\_work\14\a\\" /p:platform="Any CPU" /p:configuration="Debug" /p:VisualStudioVersion="16.0" /p:_MSDeployUserAgent="TFS_7842cdc1-e646-44c6-9caa-e4fc5eaf2560_build_208_0""
当前目录 = "C:\agents\_work\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda\1.151.2"
MSBuild版本 = "16.11.2+f32259642"
BPS: 默认将.NET Framework v4.8映射到.NET Framework v4.0版本的aspnet_compiler.exe。如需更改使用的工具版本,请设置"ToolPath"参数指定工具的正确路径。
BPS: 默认将.NET Framework v4.8映射到.NET Framework v4.0版本的aspnet_compiler.exe。如需更改使用的工具版本,请设置"ToolPath"参数指定工具的正确路径。
项目 "C:\agents\_work\14\s\BPS.sln" 在节点1(默认目标)上构建。
使用工具版本"Current"构建。
目标"ValidateSolutionConfiguration"位于文件"C:\agents\_work\14\s\BPS.sln.metaproj",来自项目"C:\agents\_work\14\s\BPS.sln"(入口点):
任务"Error"跳过,因为条件不成立;(('$(CurrentSolutionConfigurationContents)' == '') and ('$(SkipInvalidConfigurations)' != 'true')) 计算结果为 (('<SolutionConfiguration>
  <ProjectConfiguration Project="{5FA4972F-7390-4264-B5EC-083A69B2FD82}" AbsolutePath="C:\agents\_work\14\s\http://localhost/BPS" BuildProjectInSolution="True">Debug|AnyCPU</ProjectConfiguration>
</SolutionConfiguration>' == '') and ('true' != 'true'))。
任务"Warning"跳过,因为条件不成立;(('$(CurrentSolutionConfigurationContents)' == '') and ('$(SkipInvalidConfigurations)' == 'true')) 计算结果为 (('<SolutionConfiguration>
  <ProjectConfiguration Project="{5FA4972F-7390-4264-B5EC-083A69B2FD82}" AbsolutePath="C:\agents\_work\14\s\http://localhost/BPS" BuildProjectInSolution="True">Debug|AnyCPU</ProjectConfiguration>
</SolutionConfiguration>' == '') and ('true' == 'true'))。
使用来自程序集"Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"的"Message"任务。
任务"Message"
  正在生成解决方案配置"Debug|Any CPU"。
完成执行任务"Message"。
完成在项目"BPS.sln"中构建目标"ValidateSolutionConfiguration"。
目标"ValidateToolsVersions"位于文件"C:\agents\_work\14\s\BPS.sln.metaproj",来自项目"C:\agents\_work\14\s\BPS.sln"(入口点):
任务"Error"跳过,因为条件不成立;('$(MSBuildToolsVersion)' == '2.0' and ('$(ProjectToolsVersion)' != '2.0' and '$(ProjectToolsVersion)' != '')) 计算结果为 ('Current' == '2.0' and ('' != '2.0' and '' != ''))。
完成在项目"BPS.sln"中构建目标"ValidateToolsVersions"。
目标"ValidateProjects"位于文件"C:\agents\_work\14\s\BPS.sln.metaproj",来自项目"C:\agents\_work\14\s\BPS.sln"(入口点):
任务"Warning"跳过,因为条件不成立;( ('$(Configuration)' == 'Release') and ('$(Platform)' == 'Any CPU') ) 计算结果为 ( ('Debug' == 'Release') and ('Any CPU' == 'Any CPU') )。
完成在项目"BPS.sln"中构建目标"ValidateProjects"。
目标"Build"位于文件"C:\agents\_work\14\s\BPS.sln.metaproj",来自项目"C:\agents\_work\14\s\BPS.sln"(入口点):
使用来自程序集"Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"的"MSBuild"任务。
任务"MSBuild"
  全局属性:
    BuildingSolutionFile=true
    CurrentSolutionConfigurationContents=<SolutionConfiguration>
    <ProjectConfiguration Project="{5FA4972F-7390-4264-B5EC-083A69B2FD82}" AbsolutePath="C:\agents\_work\14\s\http://localhost/BPS" BuildProjectInSolution="True">Debug|AnyCPU</ProjectConfiguration>
  </SolutionConfiguration>
    SolutionDir=C:\agents\_work\14\s\
    SolutionExt=.sln
    SolutionFileName=BPS.sln
    SolutionName=BPS
    SolutionPath=C:\agents\_work\14\s\BPS.sln
  项目"C:\agents\_work\14\s\BPS.metaproj"的附加属性:
    Configuration=Debug
    Platform=Any CPU
项目"C:\agents\_work\14\s\BPS.sln"(1)正在节点1(默认目标)上构建"C:\agents\_work\14\s\BPS.metaproj"(2)。
使用工具版本"Current"构建。
目标"GetFrameworkPathAndRedistList"位于项目"C:\agents\_work\14\s\BPS.metaproj"(目标"Build"依赖于此):
使用来自程序集"Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"的"GetFrameworkPath"任务。
任务"GetFrameworkPath"
完成执行任务"GetFrameworkPath"。
使用来自程序集"Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"的"CreateItem"任务。
任务"CreateItem"
完成执行任务"CreateItem"。
完成在项目"BPS.metaproj"中构建目标"GetFrameworkPathAndRedistList"。
目标"Build"位于项目"C:\agents\_work\14\s\BPS.metaproj"(入口点):
任务"MSBuild"
完成执行任务"MSBuild"。
任务"CreateItem"
完成执行任务"CreateItem"。
任务"ReadLinesFromFile"跳过,因为条件不成立;( '%(Project_5FA4972F-7390-4264-B5EC-083A69B2FD82_References_RefreshFile.Identity)' != '' ) 计算结果为 ( '' != '' )。
使用来自程序集"Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"的"CombinePath"任务。
任务"CombinePath"
完成执行任务"CombinePath"。
使用来自程序集"Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"的"Copy"任务。
任务"Copy"
完成执行任务"Copy"。
使用来自程序集"Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"的"GetReferenceAssemblyPaths"任务。
任务"GetReferenceAssemblyPaths"
完成执行任务"GetReferenceAssemblyPaths"。
任务"ResolveAssemblyReference"跳过,因为条件不成立;(Exists('%(Project_5FA4972F-7390-4264-B5EC-083A69B2FD82_References.Identity)')) 计算结果为 (Exists(''))。
任务"Copy"
完成执行任务"Copy"。
使用来自程序集"Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"的"AspNetCompiler"任务。
任务"AspNetCompiler"

  C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v /BPS -p ..\..\..\..\..\inetpub\wwwroot\BPS\ -u -f -d PrecompiledWeb\BPS\
  Microsoft (R) ASP.NET编译工具版本4.8.3761.0
  预编译ASP.NET应用程序的工具
  版权所有(C) Microsoft Corporation。保留所有权利。


完成执行任务"AspNetCompiler"。
任务"Message"跳过,因为条件不成立;(!((false) or ('$(AspNetConfiguration)' == 'Debug') or ('$(AspNetConfiguration)' == 'Release'))) 计算结果为 (!((false) or ('Debug' == 'Debug') or ('Debug' == 'Release')))。
完成在项目"BPS.metaproj"中构建目标"Build"。
完成构建项目"C:\agents\_work\14\s\BPS.metaproj"(默认目标)。
完成执行任务"MSBuild"。
完成在项目"BPS.sln"中构建目标"Build"。
完成构建项目"C:\agents\_work\14\s\BPS.sln"(默认目标)。

构建成功。
    0 个警告
    0 个错误

解决方案建议

  1. 指定正确的AspNetCompiler版本
    日志显示当前使用的是.NET Framework 4.0版本的aspnet_compiler.exe,与应用的4.8版本不匹配。在VS Build任务的MSBuild参数中添加:

    /p:ToolPath="C:\Windows\Microsoft.NET\Framework\v4.8.3761.0\"
    

    确保使用对应版本的编译工具。

  2. 调整构建输出配置

    • 移除PackageAsSingleFile=true参数,改为生成松散文件输出,保证bin文件夹被正确包含;
    • 检查项目中NuGet引用的DLL属性,将复制本地设置为True,确保构建时DLL被复制到输出目录。
  3. 优化流水线复制步骤

    • 修改复制命令,添加**\bin\**作为源路径的一部分,确保bin目录被纳入复制范围;
    • 验证发布工件的内容,确认bin文件夹已包含在发布包中。
  4. 修复NuGet引用解析问题

    • 在构建任务中添加NuGet Install步骤,确保包被正确还原到本地并被MSBuild识别;
    • 检查项目文件,确认所有NuGet引用的路径配置正确,避免ResolveAssemblyReference任务被跳过。

内容的提问来源于stack exchange,提问作者Joel Nnogo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:33:07