Хостинг asp.core: как заменить устаревший RazorViewEngineOptions.CompilationCallback на AddApplicationPart? - PullRequest
0 голосов
/ 15 января 2019

RazorViewEngineOptions.CompilationCallback устарел ...

enter image description here

... когда подробная информация, предоставленная MS , рекомендует настраивать сборки с ApplicationPartManager.AddApplicationPart вместо CompilationCallback:

Приложения, использующие эти API для добавления ссылок на сборки в компиляцию контекст для компиляции во время выполнения должен вместо этого использовать ApplicationPartManager.AddApplicationPart, чтобы добавить части приложения для ссылка на каждую сборку

Но AddApplicationPart можно применить только к IMvcBuilder, когда для запуска ядра asp в собственном процессе мы используем WebHostBuilder (который не является производным от IMvcBuilder)

var hostBuilder = new WebHostBuilder()
    // contains obsolete code
    //.ConfigureServices(TestManager.InitializeServices) 
    .AddApplicationPart(..); // compilation error, impossible to apply, IMvcBuilder expected !

Как AddApplicationPart следует называть? Где взять IMvcBuilder?

Ранее использованный код (собирает сборки для asp сервера), который следует заменить на AddApplicationPart:

public static void InitializeServices(IServiceCollection services){
  services.Configure((RazorViewEngineOptions options) =>
  {
     var previous = options.CompilationCallback;
     options.CompilationCallback = (context) =>
     {
        previous?.Invoke(context);

        var assembly = typeof(Startup).GetTypeInfo().Assembly;
        var assemblies = assembly.GetReferencedAssemblies().Select(x => MetadataReference.CreateFromFile(Assembly.Load(x).Location))
                .ToList();
        assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("mscorlib")).Location));
        ...

1 Ответ

0 голосов
/ 22 января 2019

Вы можете взаимодействовать с ApplicationPartManager при запуске при настройке MVC.

IMvcBuilder может использоваться при вызове AddMvc().

services.AddMvc() .ConfigureApplicationPartManager(_ => _....)

...