Ⅰ. 问题描述

今天一同事遇到的问题:使用Visual Studio“生成” -> “重新生成解决方案”时出现错误”CS0006 未能找到元数据文件 bin\Release\ClassLibrary1.dll”,但是使用 “生成” -> “生成解决方案” ,或者F5直接运行程序调试都不会出现上述错误。

Ⅱ. 思路

首先想到的就是工程配置文件出现了问题,因此我就使用文本编辑器打开工程配置.csproj文件,然后搜索”ClassLibrary1.dll”

搜索到的第一项是项目引用:

解决Visual Studio重新生成解决方案时出现错误“CS0006 未能找到元数据文件 xxx.dll”-萤火

很正常的引用路径,我查看了一下该路径下确实存在”ClassLibrary1.dll” 文件

接下来继续搜索,找到了第二项:

解决Visual Studio重新生成解决方案时出现错误“CS0006 未能找到元数据文件 xxx.dll”-萤火

哈,路径与报错信息一致,应该就是这里的问题了。这是一个分析器的配置文件,先删除这3行配置试试。

保存配置文件,然后返回Visual Studio,提示检测到文件修改,点击“全部重新加载”

解决Visual Studio重新生成解决方案时出现错误“CS0006 未能找到元数据文件 xxx.dll”-萤火

重新点击 “生成” -> “重新生成解决方案” ,问题得解。

Ⅲ. 分析

猜测是之前有开发人员比较粗心粗心,添加dll操作错了,把dll添加进了分析器,导致了项目配置文件多了Analyzer节点(这还有一点题外话:不要引用bin路径下的dll啊)

解决Visual Studio重新生成解决方案时出现错误“CS0006 未能找到元数据文件 xxx.dll”-萤火

然后如果点击”生成” -> “生成解决方案” 或者F5直接运行程序调试是不会去清理release文件夹的,所以该虽然有Analyzer节点,但是也不会出错 ;但是点击”生成” -> “重新生成解决方案”会先执行一步”清理解决方案”的操作并去清理release文件夹,然后会把这个dll删了,Visual Studio就报错了。