简体   繁体   English

防止在IIS / ASP.net中共享DLL

[英]Prevent sharing DLL in IIS/ASP.net

lets say I have two ASP MVC applications. 可以说我有两个ASP MVC应用程序。

ProjectXXX ProjectYYY - this is fork of ProjectXXX. ProjectXXX ProjectYYY-这是ProjectXXX的分支。

Both projects have same structure (project/assembly name), but it differs on some functionality (it will be deployed for other countries). 这两个项目具有相同的结构(项目/程序集名称),但是在某些功能上有所不同(将在其他国家/地区部署)。

For testing purposes we deploy both applications on one server. 为了进行测试,我们将两个应用程序都部署在一台服务器上。

  • ProjectXXX - has own IIS pool ProjectXXX-有自己的IIS池
  • ProjectYYY - has own IIS pool ProjectYYY-具有自己的IIS池

Problem 问题

When I removed some functionality from assembly of ProjectXXX and run ProjectYYY it throws TypeLoadException : Could not load type 'Project.Namespace.IMyInterface' from assembly 'Project.Namespace' 当我从ProjectXXX的程序集中删除某些功能并运行ProjectYYY时,它将引发TypeLoadException:无法从程序集“ Project.Namespace”中加载类型“ Project.Namespace.IMyInterface”

It looks like ProjectYYY uses DLL from ProjectXXX (IIS (asp.net?) loads dll once, because it "thinks" assemblies are the same?) 似乎ProjectYYY使用ProjectXXX中的DLL(IIS(asp.net?)一次加载dll,因为它“认为”程序集相同?)

How to force IIS not to cache those assemblies and load the proper one for both apps? 如何强制IIS不缓存那些程序集并为两个应用程序加载正确的程序集?

EDIT / SOLUTION: 编辑/解决方案:

I have found, that my application uses MEF composition. 我发现我的应用程序使用MEF组合。 As for now I have changed how it searches for assemblies and problem looks like gone :) 到目前为止,我已经更改了它搜索程序集的方式,问题似乎消失了:)

if you create separate IIS Site for each, it should do the trick, as for each site a separate w3wp process is run. 如果为每个站点创建一个单独的IIS站点,它应该可以解决问题,因为对于每个站点,都运行一个单独的w3wp进程。 Having said that, you can't share same ip and port for 2 sites so if you need that, you'll have to play around with redirecting, url rewriting on IIS. 话虽如此,您不能为2个站点共享相同的ip和端口,因此,如果需要,您将不得不在IIS上进行重定向和URL重写。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM