如何将razor视图分发到.NETCore中的另一个应用程序

如何将razor视图分发到.NETCore中的另一个应用程序,razor,asp.net-core,views,asp.net-core-middleware,Razor,Asp.net Core,Views,Asp.net Core Middleware,我已经在.Net Core中创建了web应用程序-Asp.Net MVC 此应用程序包含一些Razor视图,但我希望将这些视图共享给另一个应用程序,例如使用DLL或类似的中间件 下面是一些关于分发控制器的示例的信息,但是关于视图没有什么特别的- 我尝试过这样添加控制器: var assembly = typeof(Project.HomeController).GetTypeInfo().Assembly; services.AddMvc() .AddApplicationPa

我已经在
.Net Core
中创建了web应用程序-
Asp.Net MVC

此应用程序包含一些
Razor视图
,但我希望将这些视图共享给另一个应用程序,例如使用DLL或类似的中间件

下面是一些关于分发
控制器的示例的信息,但是关于
视图
没有什么特别的-

我尝试过这样添加控制器:

var assembly = typeof(Project.HomeController).GetTypeInfo().Assembly;

services.AddMvc()
        .AddApplicationPart(assembly);
这非常有效,但我不知道如何添加视图


如何将
Razor视图
分发到其他应用程序?是否将它们像中间件一样导入到
MVC中间件中?

您可以创建一个普通的netstandard1.6库,即控制器所在的位置,并使用以下方法将视图资源嵌入csproj中的dll中:

  <ItemGroup>
    <EmbeddedResource Include="Views\**\*.cshtml" />
  </ItemGroup>

之后,您可以使用RazorViewEngineOptions注册这些选项:

// Add views provided in this assembly.     
services.Configure<RazorViewEngineOptions>(options =>
{
    options.FileProviders.Add(
        new EmbeddedFileProvider(typeof(ClassInLibrary).GetTypeInfo().Assembly));
});
//添加此程序集中提供的视图。
配置(选项=>
{
options.FileProviders.Add(
新的EmbeddedFileProvider(typeof(ClassInLibrary.GetTypeInfo().Assembly));
});

其中“ClassInLibrary”是库中的一个类,您可以从中获取部件信息。

第一个问题是,为什么要这样做?分发不带控制器的视图。如果还分发控制器,为什么不将控制器和视图放在同一个部件中?视图总是非常特定于控制器,因此在没有备份控制器的情况下重用视图的价值很小。此外,将视图作为组件分发将防止消费者自定义模板(添加或删除某些信息等)。我希望将应用程序的部分与特定的图形设计重用,这一切都是一样的。该视图与控制器位于同一程序集中,但我不知道如何在启动时将视图添加到另一个应用程序中。你能举例说明控制器视图是如何与特定应用程序连接的吗?@Tseng我已经更新了我的问题,我如何添加控制器,这很有效,但我不知道如何添加视图。:)我已经尝试了这些步骤,但在这一行:
newembeddedfileprovider(typeof(ClassInLibrary.GetTypeInfo().Assembly))-我得到错误“ClassInLibrary”这只是一个名称空间-如果我尝试列出这些名称空间的项,我只得到控制器类,我如何修复它?@Jenan正如我所解释的,ClassInLibrary是我创建的类型。这可以是您正在创建的库中的任何类—例如,您的一个控制器OK,我现在明白了。:)