【问题标题】:ASP.NET Core 2.0 - Options for importing external assembly viewsASP.NET Core 2.0 - 用于导入外部程序集视图的选项
【发布时间】:2018-01-29 16:45:42
【问题描述】:

项目结构

解决方案有以下项目:

Cms

SDK:Microsoft.NET.Sdk

输出类型:Library

包含:IServiceCollectionExtensionsIWebHostBuilderExtensions、TagHelpers、中间件和其他基础设施代码。

Cms.Web

SDK:Microsoft.NET.Sdk.Web

输出类型:Exe

包含:Razor 页面、控制器、视图、CMS 页面的 wwwroot

Cms.Manual

SDK:Microsoft.NET.Sdk.Web

输出类型:Exe

包含:Razor 页面、控制器、视图、CMS 手册的 wwwroot。

这是一个使用 CMS 的示例项目。

问题

Cms.Manual.Startup:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCms();
}

Cms.Services.IServiceCollectionExtensions:

public static IServiceCollection AddCms(this IServiceCollection services)
{
    // other code

    var assembly = typeof(Cms.Web.Pages.IndexModel).GetTypeInfo().Assembly;
    services
        .AddMvc()
        .AddApplicationPart(assembly)
        .AddControllersAsServices();

    return services;
}

这会导致异常,因为找不到 DLL。我认为这是因为我对 .Exe 输出项目的构建过程的某些部分一无所知。

我已经验证了项目间引用:一切都井井有条。

其他尝试

将视图放在Cms 项目中,使用EmbeddedFileProvider 为它们提供服务。

这行得通,但由于现在嵌入了所有 .cshtml、.js 和 .css 文件,如果样式或内容错误,我将不得不重新编译。这使该项目的 UI 开发部分陷入停顿。

我能想到的其他解决方案

Cms.Web 中的 Web 开发,使用上述嵌入文件,但添加某种构建操作以自动将文件从 Cms.Web 移动到 Cms

目标

我想实现两件事:

  • 方便消费者:只需 .UseCms() 即可,其他不多
  • 从正在使用的 ASP.NET Core 项目中的另一个程序集提供 MVC

解决办法是什么?我会接受一种绕过异常的方法。

【问题讨论】:

    标签: asp.net-core asp.net-core-2.0


    【解决方案1】:

    你可以试试我的图书馆

    AUR.NETCore.Mvc.PluginsManager

    选择将包含程序集的文件夹

    使用或扩展插件接口AUR.NETCore.Mvc.PluginsManager.interfaces.IPluginBase

    那么你必须把它添加到ConfigureServices这个

    public void ConfigureServices(IServiceCollection services)
    {
        //...
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        Plugins.Load(services); // last row
    }
    

    记住必须设置外部插件程序集

    public ViewsTypeResouces ViewsTypeResouces { get => ViewsTypeResouces.Assembly; }
    

    您将在文档中找到所有内容

    【讨论】:

    • 从那以后我放弃了这个项目,但非常感谢您的建议!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 2017-03-18
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    相关资源
    最近更新 更多