为什么在 asp.net core mvc 中的 EmbeddedFileProvider 中找不到嵌入文件?

Lyo*_*yon 5 asp.net-core-mvc

我目前正在尝试从外部程序集中加载嵌入的 ViewComponent。

我已将其包含在我的项目文件中:

<EmbeddedResource Include="Views\**\*.cshtml" />
Run Code Online (Sandbox Code Playgroud)

因此,当我检查实际程序集并运行 GetManifestResourceNames() 时,我看到该文件已嵌入。

然后我在 Startup.cs 的 ConfigureService() 中调用这个方法:

public static IMvcBuilder GetModules(this IMvcBuilder mvcBuilder)
    {
        var embeddedFileProviders = new List<EmbeddedFileProvider>
        {
            new EmbeddedFileProvider(Assembly.GetCallingAssembly())
        };

        mvcBuilder.ConfigureApplicationPartManager(apm =>
        {
            foreach (string modulePath in Directory.GetFiles(Configuration.Settings.Path, "*.Module.dll"))
            {
                var assembly = Assembly.LoadFrom(modulePath);
                var startUpType = (from t in assembly.GetTypes()
                                   where t.GetInterfaces().Contains(typeof(IModuleStartup))
                                   select t).FirstOrDefault();

                RegisterModuleServices(mvcBuilder, startUpType);

                apm.ApplicationParts.Add(new AssemblyPart(assembly));        

                embeddedFileProviders.Add(new EmbeddedFileProvider(assembly));

                Modules.Assemblies.Add(assembly);                
            }

            var compositeFileProvider = new CompositeFileProvider(embeddedFileProviders);

            mvcBuilder.Services.AddSingleton<IFileProvider>(compositeFileProvider);

        });

        return mvcBuilder;
    }
Run Code Online (Sandbox Code Playgroud)

我也没有用

mvcBuilder.Services.Configure<RazorViewEngineOptions>(o => { o.FileProviders.Add(compositeFileProvider); });

因为这根本不起作用,甚至没有调用 o.FileProviders.Add(compositeFileProvider) 操作。

当我注入 IFileProvider 时找到所有嵌入的文件提供程序,但是当我运行 _fileProvider.GetDirectoryContents(""); 时没有找到任何文件;

有人知道为什么吗?

Lyo*_*yon 6

所以我想出了为什么它没有返回任何东西......似乎我在创建新的 EmbeddedFileProvider 时没有设置 baseNameSpace 参数。笨啊。但是有很多例子没有设置这个并且它起作用了。希望这可以帮助其他一些遇到此问题的人。

  • 哇,只需将其设置为空字符串即可。愚蠢的。 (2认同)