2

我无法让 Razor 运行时编译与动态加载的程序集一起使用。我的代码:

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)); 
});

我得到错误:

找不到包“<已加载程序集的名称>”的编译库位置。

设置MvcRazorExcludeRefAssembliesFromPublishfalse不会改变任何东西。PhysicalFileProvider当我添加对项目的显式引用时,该选项有效。

我正在使用 .NET 5 并且两个项目都有Microsoft.NET.Sdk.Web类型。

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

4

1 回答 1

2

确保 的键PreserveCompilationContext 设置为false

在此处输入图像描述

并且应该使用当前项目下的路径,也就是相对路径,比如下面的代码:

services.Configure<MvcRazorRuntimeCompilationOptions>(options =>
{
    options.FileProviders.Add(new PhysicalFileProvider(Path.Combine(WebHostEnvironment.ContentRootPath, "..\\<name_of_loaded_assembly>")));
    options.AdditionalReferencePaths.Add(pluginAssembly.Location);
});
于 2021-07-20T08:19:58.163 回答