ASP.NET Web API、WCF中无法加载Sage.Peachtree.Domain程序集求助
以下是针对你遇到的Sage.Peachtree.Domain程序集找不到异常的具体解决步骤:
确保所有依赖程序集部署到Web API目录
WinForms/控制台项目会自动将引用的依赖dll复制到输出目录,但Web项目可能不会。检查Web API的bin目录是否包含Sage.Peachtree.Domain.dll以及其他Sage SDK相关依赖(如Sage.Peachtree.API.dll、Sage.Peachtree.Session.dll等)。如果缺失,手动从Sage SDK安装路径复制到bin目录,或在项目引用中设置这些dll的复制本地属性为True。启用应用程序池的32位支持
即使项目设置为x86架构,IIS应用程序池默认可能运行在64位模式下,导致无法加载x86的Sage程序集。操作步骤:- 打开IIS管理器,找到Web API对应的应用程序池
- 右键选择高级设置
- 将启用32位应用程序设置为
True
调整应用程序池的权限与配置
Sage 50 SDK的部分功能需要桌面交互权限,而Web API的应用程序池默认无此权限:- 将应用程序池的身份改为
LocalSystem(或具有本地管理员权限的账户) - 在应用程序池高级设置中,将加载用户配置文件设置为
True
- 将应用程序池的身份改为
添加程序集绑定重定向
如果Web项目中存在版本冲突,在Web.config的<runtime>节点下添加绑定重定向配置,确保指向正确的Sage程序集版本:<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Sage.Peachtree.Domain" publicKeyToken="d06c16dde04d83e4" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2023.0.0.222" newVersion="2023.0.0.222" /> </dependentAssembly> </assemblyBinding> </runtime>验证GAC注册状态
检查Sage.Peachtree.Domain.dll是否已注册到全局程序集缓存(GAC)。打开命令提示符(以管理员身份),执行:gacutil /l Sage.Peachtree.Domain如果未注册,可使用
gacutil /i "路径\Sage.Peachtree.Domain.dll"将其注册到GAC。用Fusion Log Viewer排查加载细节
使用.NET的Fusion Log Viewer(fuslogvw.exe)查看程序集加载失败的详细日志:- 以管理员身份运行
fuslogvw.exe - 点击设置,选择记录所有绑定失败
- 运行Web API触发异常,返回查看日志,可获取程序集加载的路径、版本匹配情况等信息,定位具体问题。
- 以管理员身份运行
内容的提问来源于stack exchange,提问作者MichangGo

