首页 > 解决方案 > 如何解决找不到方法:'System.Collections.Generic.IList`1在 .Net Core 3.1 中

问题描述

将 .Net Core 2.2 MVC 项目迁移到 3.1 时,我面临以下问题。

找不到方法:'System.Collections.Generic.IList`1<Microsoft.Extensions.FileProviders.IFileProvider> Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.get_FileProviders()'。

欢迎任何建议。

下面是示例代码。

  1. 配置服务方法。

    services.Configure<MvcRazorRuntimeCompilationOptions>(options =>
    {
        options.FileProviders.Clear();
        options.FileProviders.Add(new EmbeddedFileProvider(typeof(HomeController).GetType().Assembly));
    });
    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    
  2. 配置方法。

    app.UseRouting();
    
    app.UseEndpoints(endpoints =>
    {
        // Mapping of endpoints goes here:
        endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");         
    });
    
  3. 控制器。

    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }
    

如果需要更多详细信息,请告诉我。

标签: c#asp.net-core-mvcasp.net-core-2.2.net-core-3.1

解决方案


您需要Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationNuGet 包和这些用法:

using System.Reflection;
using Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation;
using Microsoft.Extensions.FileProviders;

你也可以有这样的代码,例如:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.MvcRazorRuntimeCompilationOptions>(options =>
    {
        options.FileProviders.Add(
        new EmbeddedFileProvider(typeof(HomeController).GetTypeInfo().Assembly));
    });
    
    // Requires using System.Reflection;
    var assembly = typeof(HomeController).GetTypeInfo().Assembly;
    services.AddMvc().AddRazorRuntimeCompilation()
                    .AddApplicationPart(assembly)
                    .SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
}

推荐阅读