C# 使用反射从.NET 64位exe调用.NET 32位dll中的方法

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

我有一个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
    {
        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”。