什么可能导致一个环境中的ASP.NET网站中的辅助程序集出现TypeLoadException,而不是另一个?这就是我所拥有的:
HttpResponse
扩展方法MediaRequestHandler
(: IHttpHandler
)引用我的HttpResponse
扩展程序,加上HttpContext
及相关类<Reference Include="System.Web" />
这适用于网站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)
答案 0 :(得分:1)
类型加载异常意味着在指定的程序集Company.Web.Media.MediaRequestHandler
中找不到请求的类型Company.Web
。因为它在一个环境而不是另一个环境中工作,我建议检查以下内容:
Company.Web
程序集尚未针对此问题进行更新
服务器/站点。换句话说,问题Company.Web.dll
server / site不代表包含的最新/目标版本
Company.Web.Media.MediaRequestHandler
。
配置中存在错误,并且引用了错误的类型。换句话说,Company.Web.Media.MediaRequestHandler
实际上并不是正确的类型名称。
拼写错误。与上面的#2类似,类型的名称在配置引用或程序集本身中拼写错误。
根据我的经验,罪魁祸首中有9次是#1。