C# 使用反射从.NET 64位exe调用.NET 32位dll中的方法
我有一个32位的.NET类库,它有一个简单的公共类和一个简单的公共方法。我有一个64位的.NET控制台应用程序,其中使用反射,我希望加载32位程序集并使用其方法C# 使用反射从.NET 64位exe调用.NET 32位dll中的方法,c#,reflection,64-bit,C#,Reflection,64 Bit,我有一个32位的.NET类库,它有一个简单的公共类和一个简单的公共方法。我有一个64位的.NET控制台应用程序,其中使用反射,我希望加载32位程序集并使用其方法 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using Host.TestLib; namespace test { class Program
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using Host.TestLib;
namespace test
{
class Program
{
static void Main(string[] args)
{
var lib = Assembly.LoadFrom("Simple32bitAssembly.dll");
}
}
}
运行此操作时,会引发以下异常:
System.BadImageFormatException was unhandled
Message=Could not load file or assembly
'file:///E:\AjitTemp\c\32bit64Bit\ReflectionTest\test\bin\Debug\Simple32bitAssembly.dll'
or one of its dependencies. An attempt was made to load a program with an incorrect format.
Google建议我需要为这个32位dll创建一个64位包装,并在我的64位控制台应用程序中使用relection加载这个包装?这是路吗?任何示例代码都会非常有用。如果您专门将这两个程序集作为32位和64位版本,则无法将32位程序集加载到64位进程中(反之亦然) 如果可能,能否将32位程序集重建为“任意CPU”?这将允许您将“Simple32bitAssembly”加载到64位控制台应用程序中 关于你的评论: “存在业务限制,我无法将32位dll编译为‘任何CPU’。” 唯一的解决方法是将32位程序集部署到单独的32位代理进程中。此过程可以通过.NET技术公开功能,例如: WCF Remoting ASP.NET Web Service 周转基金 远程处理 ASP.NET Web服务 缺点是跨进程调用可能很昂贵(尽管您可以在WCF或远程处理中使用命名管道),并且会增加应用程序的复杂性 您也不再能够从使用64应用程序直接在此组件上使用反射(但您可以在代理中使用反射)
这就是混合体系结构应用程序的试用。存在业务限制,我无法将32位dll编译为“任何CPU”。