C# ASP.NETMVC4缓存引用吗?

C# ASP.NETMVC4缓存引用吗?,c#,.net,asp.net-mvc-4,C#,.net,Asp.net Mvc 4,我今天遇到了一个问题,这让我很恼火 我创建了一个WCF服务,它相当简单,因为它只公开两个操作,没有数据协定。此WCF服务位于业务逻辑层的顶部。在这个业务逻辑层中是一个dll,它公开了一些契约(只是普通的接口) 我还为该服务创建了两个测试客户端。一个是控制台客户端,另一个是MVC4应用程序。两者都引用相同的端点,并且都通过项目引用引用契约dll 现在,一切都很好,直到我通过添加或删除方法,甚至更改现有方法的签名来更改合同。在这一点上,我的MVC4应用程序吹得到处都是。请记住,我不是在更改WCF合同

我今天遇到了一个问题,这让我很恼火

我创建了一个WCF服务,它相当简单,因为它只公开两个操作,没有数据协定。此WCF服务位于业务逻辑层的顶部。在这个业务逻辑层中是一个dll,它公开了一些契约(只是普通的接口)

我还为该服务创建了两个测试客户端。一个是控制台客户端,另一个是MVC4应用程序。两者都引用相同的端点,并且都通过项目引用引用契约dll


现在,一切都很好,直到我通过添加或删除方法,甚至更改现有方法的签名来更改合同。在这一点上,我的MVC4应用程序吹得到处都是。请记住,我不是在更改WCF合同,只是一些内部合同

原因是在业务逻辑层内部,我正在通过静态构造函数初始化AutoMapper配置文件。在这个静态构造函数中,我基本上获取当前域的所有程序集,并遍历它们以查找实现IProfile的对象。当我开始尝试从引用contracts dll的dll之一获取类型时,我得到了一个致命的异常:System.TypeLoadException

现在,console客户端表现得很好。同样,通过项目引用引用相同的dll。我可以整天改变它,它就像百灵鸟一样快乐,但MVC4会吹出大块。如果我回去,让界面完全像MVC4高兴之前一样

我注意到未能加载的程序集的路径位于临时ASP.Net文件位置。我把整个目录都毁了,还是没什么好运气

我可以提供代码,但如果我给您一个依赖关系图可能会更好。BLL中已经有大约5k行代码


提前感谢。

您是否在更改WCF后更新服务参考?当右键单击MVC项目中的服务引用时,您有这样的选项我不会更改WCF合同,只是更改一些内部共享合同。因此,WCF和MVC应用程序之间的共享dll正在发生变化。我不认为我需要更新共享dll的服务引用,但我会尝试一下。谢谢我怀疑“引用合同dll的dll之一”。您确定在更改dll后正在重建dll吗?我曾经遇到过这样的情况:一个项目意外地使用了一个程序集引用而不是一个项目引用,导致了像您描述的那样的问题。您是否已反编译引发问题的程序集,以再次检查它是否是最新的?看,这很奇怪。所以我所做的就是完全删除一个接口(我把它推得更低——我不需要在API级别公开它)。因此,当我通过控制台程序加载dll时,一切正常——我可以反映并查看合同中的两个接口。在MVC上,并且只有MVC才能得到错误。在检查导致错误的类型(在加载程序异常中)后,我注意到它显示了三个接口。此外,程序集位置位于临时ASP.Net文件夹下的文件夹中。这就是我想到某种缓存的原因——我所有的引用都是project.cont。这也不能解释为什么不管我对接口做了什么更改,控制台程序都可以正常工作,它调用与我的MVC应用程序中的控制器相同的端点。对接口的一个更改使MVC陷入混乱。这几乎就像MVC忽略了对项目引用DLL的任何更改,而总是保留一个旧拷贝。哦,删除和重新添加引用没有任何作用。