在一个环境中,是什么导致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分支,从我构建此代码的地方到服务器ABC,站点1
- MAIN分支,到我大规模合并此代码的地方,从那里构建到服务器ABC,站点2
- 这些是Sitecore网站
这在站点1上有效,但当它试图调用我的MediaRequestHandler
时,我在站点2中得到了一个TypeLoadException
。例外中没有太多细节(如下(。我在服务器上运行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)
类型加载异常意味着在指定的程序集Company.Web
中找不到请求的类型Company.Web.Media.MediaRequestHandler
。因为它在一个环境中工作,但在另一个环境下不工作,我建议检查以下内容:
-
Company.Web
程序集尚未对此问题进行更新服务器/站点。换句话说,Company.Web.dll
关于这个问题服务器/站点不代表包含CCD_ 13。 -
您的配置中存在错误,并且引用了错误的类型。换句话说,
Company.Web.Media.MediaRequestHandler
实际上不是正确的类型名称。 -
拼写错误。与上面的#2类似,类型的名称在配置引用或程序集本身中拼写错误。
根据我的经验,10次中有9次是罪魁祸首。