Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从程序集中加载资源而不加载程序集_C#_.net - Fatal编程技术网

C# 从程序集中加载资源而不加载程序集

C# 从程序集中加载资源而不加载程序集,c#,.net,C#,.net,我想从程序集中提取资源,但不想加载程序集本身,甚至不想加载到单独的AppDomain中 是否有一种读取程序集ManifestResourceStreams的方法不是程序集。GetManifestResourceStream,它需要加载程序集 我正在寻找的示例: var r=newassemblyResourceReader(“Test.dll”); streams=r.GetResourceStream(“image.png”); 从另一个答案中找到: 您可以使用一些API,例如,它允许您在不使

我想从程序集中提取资源,但不想加载程序集本身,甚至不想加载到单独的AppDomain中

是否有一种读取程序集ManifestResourceStreams的方法不是
程序集。GetManifestResourceStream
,它需要加载程序集

我正在寻找的示例:

var r=newassemblyResourceReader(“Test.dll”);
streams=r.GetResourceStream(“image.png”);

从另一个答案中找到:

您可以使用一些API,例如,它允许您在不使用反射机制加载托管dll的情况下查看托管dll


Ref:

找到了答案:System.Reflection.Metadata包有这样的实用程序

使用System.IO;
使用System.Reflection.Metadata;
使用System.Reflection.PortableExecutable;
公共静态类AssemblyMetadataReader
{      
公共静态字节[]GetManifestResource(字符串asmPath,字符串resourceName)
{
使用(var fs=File.OpenRead(asmPath))
{
PEReader per=新PEReader(fs);
MetadataReader mr=per.GetMetadataReader();
foreach(mr.ManifestResources中的var resHandle)
{
var res=mr.GetManifestResource(resHandle);
如果(!mr.StringComparer.Equals(res.Name,resourceName))
持续
PEMemoryBlock resourceDirectory=per.GetSectionData(per.PEHeaders.CorHeader.ResourcesDirectory.RelativeVirtualAddress);
var reader=resourceDirectory.GetReader((int)res.Offset,resourceDirectory.Length-(int)res.Offset);
uint size=reader.ReadUInt32();
返回reader.ReadBytes((int)大小);
}
}
返回null;
}      
}

您能详细说明为什么不想加载整个程序集吗?我遇到了几个原因:例如不兼容、性能。或者想象一下,例如,您在一个插件目录中有100个DLL,并且希望列出它们,并显示每个DLL的缩略图作为资源。您可以添加指向另一个答案的链接吗?这个链接可能会给你的答案添加更多的上下文。我认为这应该作为注释添加,并添加对该答案的引用。谢谢你的建议。