这是一个经常遇到的编译问题,触发原因也可能有多种,此次记录的是其中一种情况。
环境描述,原有一个解决方案A,其中含两个项目,项目1引用了项目2(引用项目,并非引用dll文件),项目2的编译目标路径并非默认bin文件夹路径。这样的话项目1在进行编译时,会先找项目2所设置的编译路径,再从此该编译路径下找到项目2的dll文件。
创建一个解决方案B,在其中创建一个项目3,然后通过新增已有项目,将项目1加入到该解决方案中,然后将项目3引用项目1,之后进行编译,就会遇到“未找到元数据文件”的问题。
原因,因为项目3引用了项目1,所以在编译时会优先编译项目1,又因为项目1引用了项目2,所以项目1会在编译时,寻找所依赖的项目2的编译结果,但项目1对项目2的引用设置是解决方案A设置的[引用项目]模式,而解决方案B中并没有将项目2加入进来,这就导致解决方案B并不能知道项目2所设置的目标编译路径是什么,只能根据项目1的引用信息到项目2的默认编译路径,也就是bin文件夹下去找,这自然是找不到的,所以就报出了编译错误。
解决方法有两种:
1、修改项目1对于项目2的引用为直接引用项目2的编译结果dll文件
2、通过解决方案B的新增已有项目功能将项目2加入到解决方案中