我一直在搜索这个问题但是没有看到答案。
我在wcf服务库中引用了两个dll,它们是.NET的C ++库API,它在从wcftestclient调用包装方法时工作正常。但是当自己在websercice中托管库时,它说“无法找到程序集xxx.dll(它是c ++ API dll之一)或其依赖性之一”。但是我可以看到它说丢失的dll会自动复制到主机webserive项目的bin / debug文件夹中。此外,我可以在一个简单的控制台项目中托管库,在该项目中调用包装器方法完全没有问题。
我希望这是一个简单的配置设置,我缺少在Web配置文件中指定,任何人都有任何建议?感谢。
答案 0 :(得分:0)
我花了将近三天的时间来解决这个问题,现在已经解决了。如果这可以帮助其他可能具有相同情况的人,这就是原因。
两个c ++库.net api dll是后期绑定的,因此在运行时它不会查找它的依赖项。我甚至尝试在GAC中注册整个外部库包,但它没有帮助;这是因为两个.net api dll中的一个是弱组件,因此CLR甚至不会在GAC中寻找它。我所做的是为服务创建静态构造函数,并在静态构造函数中将后期绑定程序集加载到AppDomain中。我正在使用Assembly.LoadFrom(string filePath)
方法(在Assembly类上可以使用其他方法来执行此操作)。现在我可以在IIS上托管服务并在任何客户端中使用它。因此,如果clr抱怨它无法找到程序集,但你可以在bin / debug文件夹中看到它,它可能是一个后期绑定程序集,需要预先加载到AppDomain中;关于AppDomain的好处是你只需要加载一次程序集,它永远不会卸载单个程序集。