这段代码从未让我失望过:
private Stream GetEmbeddedResourceStream(string resourceName)
{
Assembly assy = Assembly.GetExecutingAssembly();
string[] res = assy.GetManifestResourceNames();
for (int i = 0; i < res.Length; i++)
{
if (res[i].ToLower().IndexOf(resourceName.ToLower()) != -1)
{
return assy.GetManifestResourceStream(res[i]);
}
}
return Stream.Null;
}
此代码块需要注意三点:
- 此块适用于正在执行的程序集(
Assembly.GetExecutingAssembly()
),而不是调用程序集或任何其他程序集;更改它以满足您的需要(请参阅下面的替代方案)
resourceName
应该只是文件名(例如,如果您的文件保存在resources/myRes.bin
,您调用GetEmbeddedResourceStream("myRes.bin")
- 您的资源必须将其“资源类型”设置为“嵌入式资源”
但是,如果您希望代码适用于任意程序集,则可以将代码块更改为:
private Stream GetEmbeddedResourceStream(string resourceName)
{
return GetEmbeddedResourceName(resourceName, Assembly.GetExecutingAssembly());
}
private Stream GetEmbeddedResourceStream(string resourceName, Assembly assembly)
{
string[] res = assembly.GetManifestResourceNames();
for (int i = 0; i < res.Length; i++)
{
if (res[i].ToLower().IndexOf(resourceName.ToLower()) != -1)
{
return assembly.GetManifestResourceStream(res[i]);
}
}
return Stream.Null;
}