C# ASP.NET从另一个程序集加载视图

C# ASP.NET从另一个程序集加载视图,c#,asp.net,razor,.net-assembly,C#,Asp.net,Razor,.net Assembly,我有一个C#解决方案,包含两个项目:客户机(父项目)和RestAPI(子项目)。从客户端项目中,我正在加载一个ASP.NET服务器。当前,my RestAPI正在使用services.AddControllersWithViews().AddApplicationPart(assembly)从客户端项目成功加载控制器。目前,只能加载控制器,不过,我也想使用一些视图 总之,我要做的是使用RestAPI项目位于客户机项目中的视图 我试图做的是: services.AddControllersWith

我有一个C#解决方案,包含两个项目:客户机(父项目)和RestAPI(子项目)。从客户端项目中,我正在加载一个ASP.NET服务器。当前,my RestAPI正在使用
services.AddControllersWithViews().AddApplicationPart(assembly)从客户端项目成功加载控制器。目前,只能加载控制器,不过,我也想使用一些视图

总之,我要做的是使用RestAPI项目位于客户机项目中的视图

我试图做的是:

  • services.AddControllersWithViews().AddApplicationPart(程序集)=>它仅加载控制器
  • services.AddMvc().AddApplicationPart(程序集)=>相同的结果
  • 返回视图文件的静态路径(即:
    返回视图(“C:\Simon\…”;
  • 项目结构:

    在控制器
    devicecontroller.cs
    中,我必须执行以下功能:

    [Route("show")]
    [HttpGet]
    public ViewResult Show()
    {
    return View("Home");
    }
    
    我想返回位于“客户端项目”下的“视图”文件夹中的视图。但是,它只返回RestAPI下的值。如果删除RestAPI中的一个,应用程序将崩溃,并出现以下错误日志:

    System.InvalidOperationException:未找到视图“主页”。搜索了以下地点: /视图/设备/Home.cshtml /Views/Shared/Home.cshtml


    我想你必须考虑添加相关的程序集。

    private static void AddApplicationPart(IMvcBuilder mvcBuilder, Assembly assembly)
        {
            var partFactory = ApplicationPartFactory.GetApplicationPartFactory(assembly);
            foreach (var part in partFactory.GetApplicationParts(assembly))
            {
                mvcBuilder.PartManager.ApplicationParts.Add(part);
            }
    
            var relatedAssemblies = RelatedAssemblyAttribute.GetRelatedAssemblies(assembly, throwOnError: false);
            foreach (var relatedAssembly in relatedAssemblies)
            {
                partFactory = ApplicationPartFactory.GetApplicationPartFactory(relatedAssembly);
                foreach (var part in partFactory.GetApplicationParts(relatedAssembly))
                {
                    mvcBuilder.PartManager.ApplicationParts.Add(part);
                }
            }
        }