问题描述
我无法使用 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);
});