使用 C# 使用 Assembly GetManifestResourceStream 方法读取资源文件

Read a Resourse file using Assembly GetManifestResourceStream method using C#

我在项目的根文件夹下有一个证书。项目名称是 SingleSignOn,但我无法使用 GetManifestResourceStream 内置方法读取该方法。

源代码是

namespace SingleSignOn
{
    public class Program
    {
        static void Main(string[] args)
         {
            var assembly = typeof(Program).Assembly;
            var super = assembly.GetManifestResourceNames();
            using (var stream = assembly.GetManifestResourceStream("SingleSignOn.idsrv3test.pfx"))
            {

            }
        }
    }
}

解决方案资源管理器快照

我从上述内置方法 GetManifestResourceStream

得到 NULL

我不知道我错过了什么。该证书的URL为https://github.com/IdentityServer/IdentityServer3.Samples/blob/master/source/Certificates/idsrv3test.pfx

请帮助我阅读证书。

确保文件是 'Embedded Resource'。 Right click the pfx file -> Properties -> Build Action,变成'embedded resource'

试试这个:

var resourceName = "SingleSignOn.idsrv3test.pfx";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
  TextReader tr = new StreamReader(stream);
  string fileContents = tr.ReadToEnd();
}

注意:将文件作为嵌入资源。文件 > 右键单击​​ > 属性 > 构建操作 > select 嵌入资源。

解决方案 2

第 1 步:更改 .PFX 文件的属性 idsrv3test.pfx 属性,将生成操作设置为 嵌入式资源

第 2 步:代码更改:

var resourceName = "SingleSignOn.idsrv3test.pfx";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
  TextReader tr = new StreamReader(stream);
  string fileContents = tr.ReadToEnd();
}

我个人的方法是为程序集 class 编写一个扩展,因为这似乎是一个应该包含在 class 中的方法。

因此,正如其他发帖者所提到的,首先确保您的文本文件被标记为 "Embedded Resource",然后使用类似于以下的代码:

public static class Extensions
{
    public static string ReadTextResource(this Assembly asm, string resName)
    {
        string text;
        using (Stream strm = asm.GetManifestResourceStream(resName))
        {
            using (StreamReader sr = new StreamReader(strm))
            {
                text = sr.ReadToEnd();
            }
        }
        return text;
    }
}

(上面的代码可以更简洁,但我为了演示的目的而使用了这个)