微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Razor 运行时编译不适用于动态加载的程序集

如何解决Razor 运行时编译不适用于动态加载的程序集

我无法使用 Razor 运行时编译来处理动态加载的程序集。我的代码

const height = window.instance._height function debugLogs() { console.log(height + 'from context menu') } debugLogs()

Startup.cs

使用这种方法,我需要重建加载的程序集项目并重新启动主机以查看更改。当我用以下内容替换最后两行时:

var assembly = Assembly.LoadFrom(someModuleDllPath);
var viewsAssembly = Assembly.LoadFrom(someModuleViewsDllPath);

services.AddControllersWithViews()
    .AddApplicationPart(assembly)
    .AddApplicationPart(viewsAssembly)
    .AddRazorRuntimeCompilation();
            
services.Configure<MvcRazorRuntimeCompilationoptions>(options => { 
    options.FileProviders.Add(new EmbeddedFileProvider(assembly)); 
});

我收到错误

找不到包“”的编译库位置。

services.Configure<MvcRazorRuntimeCompilationoptions>(options => { options.FileProviders.Add(new PhysicalFileProvider(loadedAssemblyProjectContentRootPath)); }); 设置为 MvcRazorExcludeRefAssembliesFrompublish 不会改变任何内容。当我添加对项目的显式引用时,带有 false 的选项有效。

我使用的是 .NET 5 并且两个项目都具有 PhysicalFileProvider 类型。

有什么办法可以让它工作吗?

解决方法

确保 PreserveCompilationContext 的键设置为 false

enter image description here

并且你应该使用当前项目下的路径,即相对路径,如以下代码:

services.Configure<MvcRazorRuntimeCompilationOptions>(options =>
{
    options.FileProviders.Add(new PhysicalFileProvider(Path.Combine(WebHostEnvironment.ContentRootPath,"..\\<name_of_loaded_assembly>")));
    options.AdditionalReferencePaths.Add(pluginAssembly.Location);
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。