|
VS编译生成解决方案失败,但是检查源码完全正常的奇异现象
![]() A.DLL 文件内定义了接口I.Do(int a);方法,发布给宿主H程序使用,编译后没有问题运行正常。然后修改了I.Do方法,假设为:I.Do(int a, int b); 再次发布A.DLL到宿主程序H,在宿主程序内修改了相关的调用Do的方法,再次编译H程序,提示I.Do方法参数错误,仔细查看代码完全没有问题,相关调用的Do方法也绝对没有问题。 虽然代码没有任何问题,使用“生成解决方案”或“重新生成解决方式”编译无法通过,按F5或Ctrl+F5启用高度模式偶尔能正常运行,再次编译又出现错误。以前发生过这种情况,大致问题是VS使用了DLL缓存文件(副本),清除解决方案或者手工删除相关DLL文件就能解决。但是今天发生的编译错误截然不同,无论使用以前使用过的方法都没有效果。 直觉认为是程序问题而钻了牛角尖,花了半天时候在找原因. 最后找到问题根源:解决方案内引用了X.DLL, 而X.DLL引用了A.DLL,每次编译的时候会从X.DLL所在目录复制X.DLL及所有它的引用相关DLL(包括A.DLL)到Debug目录,因此每次编译后VS加载的是旧DLL内I.Do(int a)方法! PS: 其实使用手工删除相关DLL文件能解决问题的,由于X.DLL是服务端的文件,压根没想到此问题是服务端关联引起的。 解决方案: 1. 若要引用其它项目的DLL,必须将DLL文件复制到Debug目录,引用debug目录下的DLL. 2. 删除与本程序相关联的DLL(第3方组件除外),重新编译. 我们解决程序错误常用几种方法: 1. 经验,曾经遇到过此问题的解决方案。 2. 排除法,若N个替在问题无法确定时适合使用。 3. 网上找解决方案。 4. 检查源码,逐步解决,这种作法最苦逼。 扫一扫加微信: ![]() ![]()
参考文档:
关于FastReport.Net升级版本编译失败解决方案 原创解决方案:VS无法连接到已配置的开发Web服务器 解决方案:启动WebApiServer失败,调用的目标发生了异常 Visual Studio VS2015编译失败:全部重新生成失败,错误0 VS解决方案专业改名工具 CSFramework.Rename V1.0 - C#版 WebAPI无法编译appBuilder.UseWebApi方法不存在解决方案 使用批处理文件(.bat)安装WCF服务失败解决方案 增值功能:数据字典自动生成流水号解决方案 Visual Studio 命令行编译解决方案
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 3.0高级版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | |
|