
# 执行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 \> 管理NuGet程序包"功能，操作步骤如下：
1. 使用VS打开项目，选中"解决方案\>管理NuGet程序包"。
2. 在"浏览"页签中搜索需要的程序集。
3. 选择需要的程序集，单击"安装"，并在弹出的提示框单击"确认"。
4. 提交更改后的代码，再次构建即可解决此问题。
 
#### 处理方法2：使用NuGet管理依赖（手工修改）
如果本地没有VS集成工具，可手工修改解决方案文件实现用NuGet管理依赖，操作步骤如下：
1. 修改"csproj"文件中的依赖项，增加\<HintPath\>项。
2. 在csproj文件同级目录新增packages.config文件，如已存在新增依赖信息即可。
3. 在csproj文件中引入packages.config文件，如已有配置跳过即可。
4. 提交修改后的代码，重新构建即可解决此问题。
 
#### 处理方法3：从项目中引入程序集
部分场景下，需要从引入项目中的程序集，操作步骤如下：
1. 拷贝已有程序集到项目下，一般在根目录建立packages文件夹存放程序集。
2. 在csproj文件中引入程序集，并指定程序集地址。
3. 提交更改后的代码、程序集，重新构建即可解决问题。
 
