【问题标题】:Reference directly a Razor Class Library assembly直接引用 Razor 类库程序集
【发布时间】:2019-10-02 16:40:10
【问题描述】:

我正在开发一个需要从其他项目填充页面的 Web 应用程序。我希望为此使用 Razor 类库 (RCL)。 该文档指出a RCL can be referenced only as a project reference or a nuget package。我希望这只是确保开发人员采用推荐方式的捷径。不幸的是,如果我直接从我的 RCL 项目(MyProject.dllMyProject.Views.dll)中引用两个生成的程序集,它就不起作用。仅当我将项目引用添加到 RCL 项目时,它才有效。

我工作的公司有一个自定义构建管道,由于我无法控制的原因,我只能直接引用程序集。

我花了一些时间比较使用直接引用和项目引用时的编译输出,但我找不到区别。 有人知道为什么直接引用对 RCL 不起作用吗?如果我了解其中的区别,我应该能够从那里开始工作。

作为奖励,有人知道解决方法吗?创建CompiledRazorAssemblyPart 可以工作(如Loading Razor Class Libraries as plugins 中所述),但我宁愿不必手动搜索程序集。

【问题讨论】:

    标签: c# asp.net-mvc razor razor-pages razor-class-library


    【解决方案1】:

    将下面的代码放在 Startup.cs 上

    var assemblies = new string[] { "APP.Plugins.Test" };
    
            services
               .AddMvc()
               .ConfigureApplicationPartManager(apm =>
               {
    
                   foreach (var assemblyFile in assemblies)
                   {
    
                       //main assembly
                       var assembly = Assembly.Load(assemblyFile);
                       apm.ApplicationParts.Add(new AssemblyPart(assembly));
    
                       //view assembly
                       var assemblyView = Assembly.Load(assemblyFile+".Views");
                       apm.ApplicationParts.Add(new CompiledRazorAssemblyPart(assemblyView));                     
                   }
               });
    

    【讨论】:

    • 微软通常有很好的文档,但他们完全缺少动态加载 RCL 项目的部分。没有提到 CompiledRazorAssemblyPart。谢谢你!!!
    猜你喜欢
    • 2018-12-13
    • 2014-11-05
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 2017-01-18
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多