直接引用Razor类库程序集

时间:2019-10-02 16:40:10

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

我正在开发一个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中所述),但我宁愿不必手动搜索程序集。

1 个答案:

答案 0 :(得分:0)

将以下代码放在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));                     
               }
           });