zoukankan      html  css  js  c++  java
  • .net core中的内嵌资源以及IFileProvider

    IFileProvider 

    命名空间在 Microsoft.Extensions.FileProviders。

    这个接口主要有三个方法: GetDirectoryContents 列出虚拟路径上的文件夹,GetFileInfo文件信息,可以使用CreateReadStream读取相应的文件流。watch 监控文件更改,似乎是使用文件的修改日期访问的。

    这个接口可以自定义重写,比如支持网络路径,数据库路径等等。

    不过今天先记录下.net core的内嵌资源。

    内嵌资源:将资源文件在编译的是嵌入.dll文件中。

    .net core中内嵌资源很简单,只需要在项目文件.csproj 

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
      </PropertyGroup>
        <ItemGroup>
         <!--内嵌资源,多个文件用;分开。也支持通配符*.txt等。--> <EmbeddedResource Include="EmbeddedFilesinfo.txt;EmbeddedFilesdate.txt" /> </ItemGroup> <ItemGroup> <PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="3.1.5" /> </ItemGroup> </Project>

    内嵌资源是没有目录层级的,如果使用EmbeddedFileProvider处理这些资源,则默认情况下,路径为基础命名空间+.xxx.xx这样的格式。比如上面的date.txt则为:EmbededFiles.date.txt。

    如果使用Assembly的方法,则为:EmbeddedFileDemo.EmbeddedFiles.date.txt

    下面的代码展示了如何去读取内部的信息。

                var assembly = typeof(Program).Assembly;
    
                // 读取文件流。
                foreach (var item in assembly.GetManifestResourceNames())
                {
                    using var stream = assembly.GetManifestResourceStream(item);
                    using var streamReader = new StreamReader(stream);
                    var content = streamReader.ReadToEnd();
                    Console.WriteLine(content);
                }
    
                var embeddedFileProvider = new EmbeddedFileProvider(assembly, nameof(EmbeddedFileDemo));
    
                // 由于内嵌文件资源不存在目录结果,只有使用空字符串和/才能获取到文件,其他情况都将返回NotFoundDirectoryContents
                var files = embeddedFileProvider.GetDirectoryContents(string.Empty);
                if (files.Exists)
                {
                    using var fileInfoList = files.GetEnumerator();
                    while (fileInfoList.MoveNext())
                    {
                        var stream = fileInfoList.Current.CreateReadStream();
                        ShowContent(stream);
                    }
                }
                
            }
    
            private static void ShowContent(Stream stream)
            {
                using var streamReader = new StreamReader(stream);
                var content = streamReader.ReadToEnd();
                Console.WriteLine(content);
            }
  • 相关阅读:
    Leetcode--First Missing Positive
    Leetcode--LRU Cache
    java--遍历自定义数组
    爬网页?--Chrome帮你计算XPath
    log4j2配置
    winedt设置自动显示行号[latex]
    墓地雕塑-LA3708
    ctex moderncv版本更新--用latex写一个漂亮的简历
    用Jekyll在github上写博客——《搭建一个免费的,无限流量的Blog》的注脚
    用gameMaker做个小游戏
  • 原文地址:https://www.cnblogs.com/yeqifeng2288/p/13096541.html
Copyright © 2011-2022 走看看