我注意到有一种方法System.Reflection.Assembly
,即Assembly Load(byte[] rawAssembly)
.
我想知道是否有类似的相反操作byte[] Store(Assembly assembly)
。如果没有,我如何将程序集对象转换为byte[]
用于呼叫Assembly Load(byte[] rawAssembly)
完全在内存中而不将程序集写入文件?谢谢!
评论:问题来自于我正在使用第三方库的情况,该库向我返回一个 Assembly 实例,并且我必须使用反射来调用其方法。我不知道库如何创建这个程序集对象。我只是想知道是否可以将程序集对象存储到 byte[] 并使用“Assembly Load(byte[] rawAssembly)”重新加载它。谢谢!
无论程序集的位置如何,System.Security.Policy.Hash 都能够计算哈希值。所以我们至少有两种方法来获取字节数组形式的程序集:
1)使用反射:
var hash = new Hash(assembly);
var dllAsArray = (byte[]) hash.GetType()
.GetMethod("GetRawData", BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(hash, new object[0]);
2) 使用假的 HashAlgorithm 实现:
public class GetWholeBodyPseudoHash : HashAlgorithm
{
protected override void Dispose(bool disposing)
{
if(disposing) _memoryStream.Dispose();
base.Dispose(disposing);
}
static GetWholeBodyPseudoHash()
{
CryptoConfig.AddAlgorithm(typeof(GetWholeBodyPseudoHash), typeof(GetWholeBodyPseudoHash).FullName);
}
private MemoryStream _memoryStream=new MemoryStream();
public override void Initialize()
{
_memoryStream.Dispose();
_memoryStream = new MemoryStream();
}
protected override void HashCore(byte[] array, int ibStart, int cbSize)
{
_memoryStream.Write(array, ibStart, cbSize);
}
protected override byte[] HashFinal()
{
return _memoryStream.ToArray();
}
}
...
var bytes = new Hash(yourAssembly).GenerateHash(new GetWholeBodyPseudoHash());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)