Assembly.Load对通过Roslyn添加引用创建的程序集抛出FileNotFoundException

时间:2018-03-23 17:08:23

标签: c# reflection roslyn

我在加载从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);

0 个答案:

没有答案