我有一个.net windows服务应用程序,可以调用我们自己创建的其他一些dll。但是,所有这些dll都是为x86创建的,我们已经转移到Any CPU(在x64环境中)。遗憾的是,由于.NET的延迟加载功能,除非我们使用一些罕见且有些复杂的代码路径,否则许多这些dll都不会被加载。最终的结果?部署代码后几天或几周我们会收到不正确的格式异常。
我想知道是否有办法强制.NET完全加载它直接引用的所有程序集,以便我可以看到这样的不兼容性,而无需手动浏览创建这些依赖dll的数十个项目,或者更糟糕的是,进行完整的回归测试以强制加载所有程序集。
附录:即使有一种更简单的方法来解决我在x86-d64-in-a-x64环境中的特定问题,我仍然有兴趣了解是否有办法强制环境加载其所有依赖项。你永远不知道什么时候它会派上用场! :)
编辑:这些都是托管的DLLS,我实际上已经使用反射来分类生产中的问题。但是,在开发环境中,它遇到了与其他选项相同的问题:以某种方式手动遍历所有DLL。
答案 0 :(得分:0)
一种方法是使用ILMerge静态链接库,将它们合并到可执行文件本身。否则DLL的全部意义在于它们在代码中使用之前不会被评估。 见The .NET equivalent of static libraries?
当然你可以在应用程序加载上运行一个诊断序列,触及你所有dll的某些方面,所以至少你知道加载什么是什么,什么不会工作。