复制Sage 50 SDK示例代码后无法加载Sage_SA.SDK程序集求助
我的问题和另一类程序集加载失败的问题类似,但我遇到的是无法加载Sage_SA.SDK程序集。
我下载了带C#示例代码的Sage 50 SDK(Simply Accounting),示例代码能正常连接本地30天试用版的"公司"数据。我把示例项目里用到的SDK及其他DLL文件复制到了自己的项目中,但复制以下数据库连接代码后:
if (SDKInstanceManager.Instance.OpenDatabase([required params here])) { SageUtility.InitializeAfterDatabaseOpen(); }
抛出异常:
"Could not load file or assembly 'Sage_SA.SDK, Version=29.0.0.4, Culture=neutral, PublicKeyToken=17d2fa970cd68de9'. The system cannot find the file specified.":"Sage_SA.SDK, Version=29.0.0.4, Culture=neutral, PublicKeyToken=17d2fa970cd68de9"
奇怪的是,我能正常访问SDKInstanceManager.NUMBEROFBOOKS这类静态属性,但访问SDKInstanceManager.Instance时就会触发异常。请问这个错误的可能原因和解决方法是什么?
核对程序集版本与存放路径
确认复制到自己项目的Sage_SA.SDK.dll版本确实是29.0.0.4,且已放置在项目输出目录(如bin/Debug或bin/Release)下。复制过程中可能出现漏放、版本不匹配的情况,导致运行时找不到对应程序集。改用项目引用方式添加程序集
直接复制DLL不如通过引用添加可靠:右键项目→添加引用→浏览选中示例项目中的Sage_SA.SDK.dll,添加后在引用属性里设置复制本地为True,编译时会自动将DLL复制到输出目录,避免路径问题。检查程序集依赖项
Sage_SA.SDK可能依赖其他未复制的DLL。可以用ILSpy、Dependency Walker等工具查看该DLL的依赖列表,对比示例项目的输出目录,把缺失的依赖文件补全到自己项目的输出目录中。排查延迟加载触发的依赖问题
静态属性无需实例化对象就能访问,所以不会触发完整的程序集加载;而Instance是单例实例,访问时会加载程序集及其所有依赖,这时候才会暴露缺失问题。重点检查实例化过程中需要的关联文件,包括非托管原生DLL。确认SDK与Sage 50版本兼容性
确保本地安装的Sage 50试用版版本和SDK版本匹配,部分SDK需要对应版本的主程序支持,版本不兼容也会导致程序集加载失败。
内容的提问来源于stack exchange,提问作者SugarCoding

