更新时间:2024-10-18 GMT+08:00
执行Msbuild构建时,找不到程序集(**.dll)
问题现象
构建告警:
- warning MSB3245: 未能解析此引用。
- 未能找到程序集“Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL”。请检查磁盘上是否存在该程序集。
- 如果您的代码需要此引用,则可能出现编译错误。
原因分析
- 由提示信息可知,解决方案中引入了程序集“Microsoft.Office.Interop.Word”,但构建时环境中不具备此程序集,导致编译告警,如果项目代码中使用了此引用,甚至会直接导致失败。
- 通常情况下,此类程序集默认安装于本地系统,无需指定程序集位置,VS构建时会从默认配置的几个程序集路径查找,可以构建成功;而云端构建环境对应目录无此程序集,进而导致本地与云端构建不一致。
- 为解决此类场景,Msbuild集成了NuGet,可以在构建时从远程仓库下载对应程序集,此时只需于项目中指定“packages.config”,并于其中声明依赖的程序集即可。
- 特殊情况下,项目引用的程序集可能无法在远程仓库找到,此时需要手工保存程序集至代码仓库中,并显示指定程序集路径。
处理方法1:使用NuGet管理依赖(VS版)
如果在本地使用VS构建,遇到此问题时,可以直接使用
功能,操作步骤如下:- 使用VS打开项目,选中 。
- 在“浏览”页签中搜索需要的程序集。
- 选择需要的程序集,单击“安装”,并在弹出的提示框单击“确认”。
- 提交更改后的代码,再次构建即可解决此问题。
处理方法2:使用NuGet管理依赖(手工修改)
如果本地没有VS集成工具,可手工修改解决方案文件实现用NuGet管理依赖,操作步骤如下:
- 修改“csproj”文件中的依赖项,增加<HintPath>项。
- 在csproj文件同级目录新增packages.config文件,如已存在新增依赖信息即可。
- 在csproj文件中引入packages.config文件,如已有配置跳过即可。
- 提交修改后的代码,重新构建即可解决此问题。
处理方法3:从项目中引入程序集
部分场景下,需要从引入项目中的程序集,操作步骤如下:
- 拷贝已有程序集到项目下,一般在根目录建立packages文件夹存放程序集。
- 在csproj文件中引入程序集,并指定程序集地址。
- 提交更改后的代码、程序集,重新构建即可解决问题。
父主题: Msbuild构建