我已将此代码拉入我引用的程序集中作为资源嵌入的视图:
services.Configure<RazorViewEngineOptions>(options =>
{
options.FileProviders.Add(new EmbeddedFileProvider(typeof(SomeTypeInMyAssembly).GetTypeInfo().Assembly));
});
它成功地在嵌入位置(Views\Shared\Components\ViewComponentName\Default.cshtml
)中查找视图。我需要它在查看任何程序集之前首先搜索当前项目中的文件,这样我就可以在程序集中创建默认值,并允许&#34;覆盖&#34;在主项目中(相同的路径)。任何人都有任何想法如何做到这一点?我仍然试图通过消息来源来解决这个问题。
不,ViewLocationExpander
不是答案。我需要使用完全相同的路径和文件名,谢谢。
答案 0 :(得分:0)
原来有两种选择:
options.FileProviders.Add(HostingEnvironment.ContentRootFileProvider);
就在EmbeddedFileProvider
之前。 (HostingEnvironment
只是被采取了
来自Startup()
构造函数并存储在Startup
类的本地。磁盘上的物理文件(也可能位于缓存中)将在汇编版本之前找到。将EmbeddedFileProvider
换成您自己的类型(实施IFileProvider
)并传入IHostingEnvironment
。 GetFileInfo()
方法是
在尝试查找文件时调用。该
IHostingEnvironment
实例用于检测物理
来自根内容路径的文件,如果存在本地文件,则返回NotFoundFileInfo
:
public virtual IFileInfo GetFileInfo(string subpath)
{
if (_HostingEnvironment != null)
{
var filepath = Path.Combine(_HostingEnvironment.ContentRootPath, subpath.TrimStart('/'));
if (File.Exists(filepath))
return new NotFoundFileInfo(filepath);
}
return _EmbeddedFileProvider.GetFileInfo(subpath)
}
并将其添加到Startup.ConfigureServices()
:
services.Configure<RazorViewEngineOptions>(options =>
{
options.FileProviders.Add(new MyEmbeddedFileProvider(typeof(SomeTypeInTheTargetAssembly).GetTypeInfo().Assembly, HostingEnvironment));
});
}