今天我遇到了一个让我脱掉头发的问题。
我已经创建了一个非常简单的WCF服务,因为它只公开了两个操作而没有数据合同。此WCF服务位于业务逻辑层之上。在这个业务逻辑层内部是一个暴露一些契约的dll(只是简单的接口)。
我还为该服务创建了两个测试客户端。一个是控制台客户端,另一个是MVC4应用程序。两者都引用相同的端点,它们都通过项目引用引用合同dll。
现在,在我通过添加或删除方法或甚至更改现有方法的签名来更改合同之前,一切正常。那时我的MVC4应用程序在整个地方爆炸和抛出。请记住,我没有更改WCF合同,只是一些内部合同。
原因是我在业务逻辑层内部通过静态构造函数初始化我的AutoMapper配置文件。在这个静态构造函数中,我基本上获取当前域的所有程序集,并遍历它们以查找实现IProfile的对象。当我开始尝试从其中一个引用契约dll的dll中获取类型时,我得到一个致命的异常:System.TypeLoadException。
现在,控制台客户端表现得很好。再次,通过项目引用引用相同的dll。我可以整天改变合同dll而且它很高兴作为一个百灵鸟,但是MVC4会大肆吹嘘。如果我回去并使界面与MVC4开心之前的界面完全一样。
我注意到无法加载的程序集的路径位于Temporary ASP.Net文件位置。我抨击了整个目录,但仍然没有运气。
我可以提供代码,但如果我给你一个依赖图可能会更好。 BLL中已经有大约5k行代码。
提前致谢。