我想加载类库:
namespace ClassLibrary1
{
public class Class1
{
public Class1()
{
}
public static int Sum(int a, int b)
{
return a + b;
}
}
}
我有一个 wcf服务,它返回给我一个byte[]
数组( ClassLibrary1 )我无法加载此程序集
static void Main(string[] args)
{
FileTransferService.ApplicationHostServiceClient client = new FileTransferService.ApplicationHostServiceClient();
FileTransferService.AssemblyPackage[] asmbs = client.GetFile();
//var newDomain = AppDomain.CreateDomain("FooBar", null, null);
foreach (FileTransferService.AssemblyPackage item in asmbs)
{
byte[] mybuffer = item.Buffer;
new AssemblyLoader().LoadAndCall(mybuffer);
}
}
public class AssemblyLoader : MarshalByRefObject
{
public void LoadAndCall(byte[] binary)
{
Assembly loadedAssembly = AppDomain.CurrentDomain.Load(binary);
object[] tt = { 3, 6 };
Type typ = loadedAssembly.GetType("ClassLibrary1.Class1");
MethodInfo minfo = typ.GetMethod("Sum", BindingFlags.Public);
int x = (int)minfo.Invoke(null, tt);
Console.WriteLine(x);
}
}
在此方法中返回给我的错误:程序集loadedAssembly = AppDomain.CurrentDomain.Load(二进制);
ERROR:
BADIMAGEFORMAT EXCEPTION
Could not load file or assembly '4096 bytes loaded from Client2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.
异常:
Bad IL format
我已经在谷歌搜索这种错误,但没有确切的解决方案。我想使用AppDomain加载我的程序集。
答案 0 :(得分:2)
在这种情况下要检查的第一件事是你收到的byte[]
与完全相同,因为有许多方法可以处理一大块二进制文件。也许将文件写入磁盘(File.WriteAllBytes
)和您最喜欢的文件比较工具,或使用类似base-64或sha-1哈希的内容来验证内容。我强烈怀疑你会发现它不一样。
答案 1 :(得分:1)
因为这是谷歌搜索Bad IL format
时的第一个结果之一,我想我会解释这意味着什么。
BadImageFormatException。在这个问题的情况下,由于WCF截断它,在我的情况下.Net Framework dll被一个失败的硬盘损坏。
所以一般来说问题将存在于字节级别,对于这个问题,我一般会用以下步骤调试它:
sfc
chkdsk