首页 > 解决方案 > 启动项目 ASP.NET Core 3.1 后在运行时添加程序集控制器和视图

问题描述

我想在运行时加载程序集,而不是启动(在启动应用程序之后)。为此,我在 Internet 和 StackOverflow 上搜索了许多解决方案。我在运行时在 ASP.Net Core register Controller找到了这个答案

cnxiaoby 说:创建 ActionDescriptor 并在启动时注册它。然后在任何你可以使用的地方_partManager.ApplicationParts.Add(assembly); 一切都很好,但我可以在运行时添加控制器类,如果我想在启动应用程序后在运行时添加 Razor 视图,我会得到“未找到视图索引”

通过此代码添加视图:

var newView = AssemblyLoadContext.Default.LoadFromAssemblyPath(data.FullName);
var viewAssembly = new CompiledRazorAssemblyPart(newView);
_partManager.ApplicationParts.Add(viewAssembly);

通过此代码添加控制器:

var targetAssembly = new AssemblyPart(assembly);
_partManager.ApplicationParts.Add(targetAssembly);

之后,我将自定义操作描述符设置为:

MyActionDescriptorChangeProvider.Instance.TokenSource.Cancel();

编辑: 该代码位于 HomeController.cs 和 SampleAction 如果我将所有代码放在 HomeController.cs 和 Index“Action”中,一切都很好。如果将代码移动到其他操作(在应用程序运行并开始运行其他操作之后),代码不起作用,我会看到该错误。

  1. 我忘记了什么?
  2. 为什么项目的第一次行动中的代码很好,但不适合其他人?
  3. 第一个动作和其他动作有什么区别?

标签: asp.netasp.net-coreruntimerazor-pages

解决方案


推荐阅读