Azure Pipeline构建.NET 6项目失败,报LGHT0103文件未找到错误
问题现象
本地Visual Studio 2022可正常构建同时引用.NET Framework、.NET Standard和.NET 6的应用,但Azure Pipeline中仅.NET Standard和.NET Framework项目构建成功,.NET 6项目报错:
##[error]Setup\Merge.Base\Base.wxs(198,0): Error LGHT0103: The system cannot find the file '...._Out\Release\BaseExecutor.exe'.
相关YAML配置
.NET Standard项目恢复配置
- task: DotNetCoreCLI@2 displayName: 'Restore netstandard2.0 projects' inputs: command: 'restore' projects: '**/*.csproj' nugetConfigPath: '$(productname)\$(nugetConfigPath)' env: ARTIFACTORY__API_KEY: $(ARTIFACTORY__API_KEY)
.NET Framework和.NET 6项目恢复配置
- task: PowerShell@2 displayName: 'Restore Nuget packages $(productname)' inputs: filePath: '$(System.DefaultWorkingDirectory)\$(productname)\RestoreNugetPackage.ps1' env: ARTIFACTORY__API_KEY: $(ARTIFACTORY__API_KEY)
排查方向
核对文件路径与构建输出
确认BaseExecutor.exe由.NET 6项目生成,本地构建输出路径与Pipeline环境是否一致。Pipeline工作目录和本地存在差异,...._Out\Release这类相对路径可能在Pipeline中指向错误位置。同时检查.NET 6项目的构建任务,确保目标框架指定为net6.0,输出目录配置正确,且该构建任务在Wix打包任务之前执行。验证.NET 6 SDK环境
Azure Pipeline代理机器可能未预装.NET 6 SDK,需添加任务明确安装:- task: UseDotNet@2 displayName: 'Install .NET 6 SDK' inputs: packageType: 'sdk' version: '6.x'检查NuGet恢复逻辑
确认RestoreNugetPackage.ps1脚本是否正确处理了.NET 6项目的包恢复。本地Visual Studio会自动处理跨框架依赖,但Pipeline脚本可能遗漏相关逻辑,可单独添加.NET 6项目的恢复任务:- task: DotNetCoreCLI@2 displayName: 'Restore net6.0 projects' inputs: command: 'restore' projects: '**/*net6.0*.csproj' nugetConfigPath: '$(productname)\$(nugetConfigPath)' env: ARTIFACTORY__API_KEY: $(ARTIFACTORY__API_KEY)确认任务执行顺序
确保Wix打包任务依赖于.NET 6项目的构建任务,即.NET 6项目生成BaseExecutor.exe后,再执行Wix打包。可在YAML中通过dependsOn显式指定任务顺序。分析构建日志
查看.NET 6项目构建阶段的日志,确认是否因编译错误导致BaseExecutor.exe未生成,或者输出路径与Wix配置中的路径不匹配。
内容的提问来源于stack exchange,提问作者Aditya Dalai

