我在加载从Roslyn编译中发出的程序集(来自内存流)时遇到问题。
尝试加载程序集时,我收到FileNotFound异常RazorLight, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified
。
在编译ExternalReferences中有261个项目,其中包括C:\Users\favishg\source\repos\Empeon_Reports\Reports\bin\Debug\net461\RazorLight.dll
,所以我假设roslyn编译器知道要找到这个程序集,但它仍然给这个文件找不到异常。
更多细节:我正在动态加载 Sample.dll (后期绑定),这个dll正在使用RazorLight来编译 schtml 模板,为了让RazorLight知道 Sample.dll ,它的类型我需要将MetadataReferences添加到 Sample.dll ,它工作得很好,但我仍然有一个FileNotFound异常。
为了调试它,我下载了RazorLight源代码,似乎是在尝试从Roslyn编译的程序集中获取assembly.GetCustomAttribute<RazorLightTemplateAttribute>()
时的异常。
代码 报告重新统一( Sample.dll )
MetadataReference metadata =MetadataReference.CreateFromFile(PayrollReport);
MetadataReference metadataRazor=MetadataReference.CreateFromFile(RazorLight);
IRazorLightEngine engine;
engine = new RazorLightEngineBuilder()
.AddMetadataReferences(metadata, metadataRazor)
.UseFilesystemProject(templatePath)
.UseMemoryCachingProvider()
.Build();
PayrollSummary payrollSummary = repo.GetPayrollData();
return await engine.CompileRenderAsync("Report.cshtml", payrollSummary);
动态调用 sample.dll
Assembly asmPayroll = Assembly.LoadFrom(ParollReportDll);
//Get the correct type from dll..
IHardcodedReport rpt = (IHardcodedReport)Activator.CreateInstance(type);
string html = await rpt.GetReportHtmlAsync(bundle);