使用 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;
}
}
(上面的代码可以更简洁,但我为了演示的目的而使用了这个)
我在项目的根文件夹下有一个证书。项目名称是 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;
}
}
(上面的代码可以更简洁,但我为了演示的目的而使用了这个)