如何解决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
。
并且你应该使用当前项目下的路径,即相对路径,如以下代码:
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 举报,一经查实,本站将立刻删除。