如何在Azure DevOps中配置.NET ADX COM加载项构建部署流水线
.NET ADX COM加载项Azure DevOps构建流水线指南
问题1:如何确保Add-in Express在Azure DevOps构建代理上可用?
Azure DevOps的windows-latest托管代理默认不会预装Add-in Express(ADX),有两种可靠方案:
- NuGet包管理(推荐):ADX官方提供NuGet包,将项目依赖从本地DLL引用切换为NuGet包,构建时通过NuGet Restore自动下载到代理机器。
- 手动部署依赖:若必须使用本地DLL,将ADX核心DLL上传至Azure DevOps工件库(如Universal Packages),流水线中添加下载步骤将DLL拉取到代理指定目录;或把DLL纳入代码仓库(不推荐,易引发版本冲突和仓库体积膨胀)。
问题2:将Add-in Express依赖项纳入构建流水线的正确步骤
方案A:使用NuGet包(优先选择)
- 本地项目改造:移除对ADX本地DLL的引用,通过NuGet包管理器安装对应ADX包(如
AddinExpress.MSO对应Office通用加载项,AddinExpress.OL对应Outlook加载项)。 - 提交配置:确保项目的
PackageReference(推荐)或packages.config已正确记录ADX包依赖,将配置文件提交至代码仓库。 - 流水线配置:保留
NuGetCommand@2的restore步骤,若ADX包来自私有NuGet源,需在该任务中指定vstsFeed参数指向你的私有源。
方案B:手动部署DLL
- 上传DLL到工件库:将ADX核心DLL(如
AddinExpress.MSO.2005.dll、AddinExpress.OL.2005.dll)上传至Azure DevOps的Universal Packages。 - 流水线下载依赖:添加
UniversalPackages@0任务,将DLL下载至代理的$(Build.SourcesDirectory)\Dependencies目录。 - 配置项目引用路径:修改项目文件的
HintPath指向下载的DLL路径,或在VSBuild任务中通过msbuildArgs指定引用路径参数。
问题3:ADX COM加载项构建流水线推荐方案与最佳实践
- 优先用NuGet管理依赖:避免手动维护DLL,减少版本冲突和流水线维护成本。
- 使用PackageReference:替代传统的
packages.config,适配现代.NET项目的依赖管理逻辑,提升restore效率。 - 验证依赖完整性:在构建前添加
NuGetCommand@2的restore步骤,并可添加脚本验证依赖是否下载完成。 - 构建后处理COM注册:若需注册加载项,可使用ADX自带的
adxregistrator.exe工具,在流水线的发布阶段执行(注意托管代理的权限限制,必要时使用自托管代理)。 - 保留构建日志:开启流水线日志详细模式,便于排查依赖缺失或构建失败问题。
完整流水线YAML示例(NuGet方案)
trigger: - feature/my-branch pool: vmImage: 'windows-latest' variables: solution: '**/*.sln' buildPlatform: 'Any CPU' buildConfiguration: 'Release' steps: - task: UseDotNet@2 inputs: packageType: 'sdk' version: '5.0.x' - task: NuGetToolInstaller@1 inputs: versionSpec: '>=6.0.0' # 使用较新版本的NuGet,确保兼容ADX包 displayName: 'Install NuGet Tool' - task: NuGetCommand@2 inputs: restoreSolution: '$(solution)' feedsToUse: 'select' vstsFeed: 'your-adx-nuget-feed' # 替换为你的ADX NuGet源名称/URL displayName: 'Restore NuGet Dependencies' - task: VSBuild@1 inputs: solution: '$(solution)' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)' msbuildArgs: '/p:OutDir=$(Build.ArtifactStagingDirectory) /p:DeployOnBuild=true' displayName: 'Build ADX Add-in' - task: VSTest@2 inputs: platform: '$(buildPlatform)' configuration: '$(buildConfiguration)' testAssemblyVer2: '**\*Tests.dll' searchFolder: '$(System.DefaultWorkingDirectory)' displayName: 'Run Unit Tests' - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'ADX-Addin-Build' publishLocation: 'Container' displayName: 'Publish Build Artifacts'
内容的提问来源于stack exchange,提问作者Khan Mehnaz
相关产品推荐
相关产品推荐

