我发现我的应用程序生成Telerik报告后
var result = new ReportProcessor().RenderReport("PDF", new InstanceReportSource { ReportDocument = new MyTelerikReport(data) }, null);
var stream = new MemoryStream(result.DocumentBytes);
return CreateHttpFileResponse("MyReport.pdf", stream, "application/pdf");
我无法在CurrentDomain
var typesWithAttribute = (from a in AppDomain.CurrentDomain.GetAssemblies()
from t in a.GetTypes() //error appears here
//some filtering logic
select t).ToList();
我收到错误
System.Reflection.ReflectionTypeLoadException:无法加载一个或 更多请求的类型。检索LoaderExceptions属性 了解更多信息。
LoaderExceptions:
System.IO.FileNotFoundException:无法加载文件或程序集 'DocumentFormat.OpenXml,Version = 2.0.5022.0,Culture = neutral, PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。该 系统找不到指定的文件。文件名: 'DocumentFormat.OpenXml,Version = 2.0.5022.0,Culture = neutral, 公钥= 31bf3856ad364e35'
经过一些调查后,我发现无法加载的程序集Telerik.Reporting.OpenXmlRendering, Version=8.0.14.311, Culture=neutral, PublicKeyToken=a9d7983dfcc261be
并且在生成报表之前AppDomain.CurrentDomain.GetAssemblies()
中的程序集不存在(我假设程序集由Telerik.Reporting, Version=8.0.14.311, Culture=neutral, PublicKeyToken=a9d7983dfcc261be
动态加载)。
我可以过滤掉那个程序集,因为我不需要任何类型,但我有点担心在域中组装无法加载的事实 - 对我来说似乎有点不对。
有人可以解释会发生什么吗?这是我的问题还是第三方库的错误,它没有加载所有必需的程序集?
答案 0 :(得分:2)
问题不是程序集,而是Type
来自尚未加载的依赖程序集。
如果在程序集上调用GetTypes方法,并且该程序集中的类型依赖于尚未加载的程序集中的类型(例如,如果它派生自第二个程序集中的类型),则ReflectionTypeLoadException为抛出。
http://msdn.microsoft.com/en-us/library/system.reflection.assembly.gettypes(v=vs.110).aspx