TypeLoadException来自相同代码,不同站点,在同一台服务器上?

时间:2014-08-05 04:58:27

标签: asp.net .net iis reflection sitecore

什么可能导致一个环境中的ASP.NET网站中的辅助程序集出现TypeLoadException,而不是另一个?这就是我所拥有的:

  • Company.Web,一个.NET类库;参考System.Web 4.0
  • Company.Web包含一些HttpResponse扩展方法
  • Company.Web包含MediaRequestHandler: IHttpHandler)引用我的HttpResponse扩展程序,加上HttpContext及相关类
  • Company.UI,一个ASP.NET WebForms应用程序集;引用System.Web 4.0和Company.Web
  • 这两个项目中的引用都是<Reference Include="System.Web" />
  • MediaRequestHandler配置如下所示
  • 服务器ABC,IIS中的站点1和站点2
  • DEV分支,我将此代码构建到Server ABC,site 1
  • MAIN分支,我合并此代码的地方,以及我建立的服务器ABC,网站2
  • 这些是Sitecore网站。

这适用于网站1,但我在网站2中尝试调用TypeLoadException时收到MediaRequestHandler。异常中没有太多细节(如下)。我在服务器上运行fuslogvw并记录了故障,什么也没看到;我记录了所有内容,并在Company.Web上看到了“成功的部分加载”。后者似乎是正常行为;当然,装配正在装载,因为其中的所有其他装置都能正常工作。

上面的子弹是我认为我可能搞砸了的地方,但我已经检查了合并和基本的网站配置,我看不出任何差异。我的下一步是深入了解配置比较,但同时,任何人都可以提供关于调查重点的建议吗?

配置:

<system.webServer>
  <handlers>
    <add verb="*" path="sitecore_media.ashx" type="Company.Web.Media.MediaRequestHandler, Company.Web" name="Company.MediaRequestHandler" />
  ...
<system.web>
  <httpHandlers>
    <add verb="*" path="sitecore_media.ashx" type="Company.Web.Media.MediaRequestHandler, Company.Web" />

例外:

Exception information: 
    Exception type: TypeLoadException 
    Exception message: Could not load type 'Company.Web.Media.MediaRequestHandler' from assembly 'Company.Web'.
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
   at System.Type.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase)
   at System.Web.Compilation.BuildManager.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase)
   at System.Web.Configuration.HandlerFactoryCache.GetTypeWithAssert(String type)
   at System.Web.Configuration.HandlerFactoryCache.GetHandlerType(String type)
   at System.Web.Configuration.HandlerFactoryCache..ctor(String type)

1 个答案:

答案 0 :(得分:1)

类型加载异常意味着在指定的程序集Company.Web.Media.MediaRequestHandler中找不到请求的类型Company.Web。因为它在一个环境而不是另一个环境中工作,我建议检查以下内容:

  1. Company.Web程序集尚未针对此问题进行更新 服务器/站点。换句话说,问题Company.Web.dll server / site不代表包含的最新/目标版本 Company.Web.Media.MediaRequestHandler

  2. 配置中存在错误,并且引用了错误的类型。换句话说,Company.Web.Media.MediaRequestHandler实际上并不是正确的类型名称。

  3. 拼写错误。与上面的#2类似,类型的名称在配置引用或程序集本身中拼写错误。

  4. 根据我的经验,罪魁祸首中有9次是#1。