IIS7未加载程序集

问题描述:

我正在使用反射来拾取要在容器中注册的类型集合。IIS7未加载程序集

问题是,在IIS 7.5应用程序池回收或IISRESET后,并非所有组件都可以通过反射拾取。

任何方式来解决这个问题,而无需通过bin文件夹,并做每个DLL上的程序集加载?

更新:

我使用AppDomain.Current.GetAssemblies()检索加载的所有组件。

+2

我认为有一种方法可以使用配置文件中的部分来引用程序集;这可能会导致程序集加载。我快速地看了一眼,找不到我正在寻找的东西,但如果这样的特征存在,那么这个评论可能会帮助人们记住一些内存。 – 2011-03-23 04:27:14

+2

用于编译的'assemblies'元素可能会产生一些影响http://msdn.microsoft.com/en-us/library/bfyb45k1.aspx通过使程序集足够已知被加载用于反射。我还没有尝试重新创建你的情况并使用这个元素。 – 2011-03-23 04:38:50

问题解决。

请勿使用AppDomain.CurrentDomain.GetAssemblies()。

相反,使用

System.Web.Mvc.BuildManager.GetReferencedAssemblies() 

只有怪癖是.GetReferencedAssemblies()传回的ICollection(对象),你需要转换为大会然后与合作。

谢谢大家的帮助。

编辑 - 幸得多米尼克Pettifer - “AppDomain.CurrentDomain.GetAssemblies()全副武装,并且极其危险的” http://www.dominicpettifer.co.uk/Blog/44/how-to-get-a-reference-to-all-assemblies-in-the--bin-folder?replyId=357

确实。

Tripple Edit。不是AppDomain.CurrentDomain.GetReferencedAssemblies()。使用System.Web.Mvc中的BuildManager类。

+0

我想你没有看看这些链接..他们给出了步骤和代码,并解释了如何做到这一点。 – sikender 2011-03-23 06:09:58

+0

链接已死。这就是为什么我们不喜欢SO – devshorts 2014-04-24 22:50:39

+0

@devshorts上的链接您不需要任何比BuildManager.GetReferencedAssemblies()更多的东西。这是一个静态类的静态方法。不知道你需要更多的解释。 – 2014-04-25 10:09:38