Azure DevOps管道(MS托管代理)出现Wix LGHT0091重复属性错误
针对你遇到的Error LGHT0091: Duplicate symbol 'Property:WIX_IS_NETFRAMEWORK_472_OR_LATER_INSTALLED'错误,虽然提示是重复ID,但由于未做代码变更就突然出现,问题大概率出在MS托管代理的环境或依赖配置上,以下是具体排查和解决步骤:
锁定WIX工具集版本
MS托管代理会自动更新预装的工具集版本,不同版本的WIX可能重复定义了.NET框架检测属性。在你的WIX项目文件(.wixproj)或管道构建任务中,明确指定固定的WIX工具集版本,比如在项目文件中添加:<PropertyGroup> <WixToolset.ToolsetVersion>3.11.2</WixToolset.ToolsetVersion> </PropertyGroup>选择与你的项目兼容的稳定版本,避免代理自动使用最新版本引发冲突。
清理重复的WIX扩展引用
检查项目的nuget包引用,确认是否同时添加了多个可能包含该属性的WIX扩展(比如WixToolset.NetFxExtension和其他第三方扩展)。打开项目文件,移除重复的扩展引用,只保留一个提供.NET框架检测逻辑的扩展。清除代理构建缓存
托管代理的缓存可能残留了旧版本的WIX依赖文件,导致构建时加载重复的属性定义。在管道中添加前置清理步骤,执行以下命令清除缓存:dotnet nuget locals all --clear或者针对WIX工具集的缓存目录进行清理,确保每次构建使用干净的依赖环境。
检查条件导入逻辑
排查你的.wxs文件,确认是否存在根据构建条件(如Debug/Release、环境变量)重复导入同一个.NET框架检测片段的情况。比如是否多次使用<Include>或<Fragment>导入了包含WIX_IS_NETFRAMEWORK_472_OR_LATER_INSTALLED属性的代码,调整条件逻辑避免重复导入。
内容的提问来源于stack exchange,提问作者DomBat

