【问题标题】:Run .net web service with projects including both 32 and 64 bit assemblies使用包括 32 位和 64 位程序集的项目运行 .net Web 服务
【发布时间】:2016-11-01 13:30:25
【问题描述】:

是否可以在同一个 .net 项目中结合 32 位和 64 位 dll? 我收到此错误:

An attempt was made to load a program with an incorrect format

【问题讨论】:

    标签: c# .net web-services


    【解决方案1】:

    确实可以在同一个项目中添加/使用这样的程序集。

    不可能在运行时加载架构不匹配的程序集,但这在代码中相对容易处理 - 检查架构并仅使用相应程序集中的类。

    【讨论】:

      【解决方案2】:

      如果您只使用托管程序集,请指定任何 CPU 平台目标。

      如果您通过 [DllImport] 仅使用项目中的本机库 - 只需将两者都包含到您的项目中,并使用不同的名称,例如native.x86.dllnative.x64.dll,并选择合适的代码:

      [DllImport("native.x86.dll")]
      public static extern int ExtrernalFunc86();
      
      [DllImport("native.x64.dll")]
      public static extern int ExtrernalFunc64();
      // ....
      if (IntPtr.Size == 8) return ExternalFunc64();
      else return ExternalFunc86();
      

      如果您使用针对特定 CPU(具有相同 API)的托管库,您可以引用其中一个,但将两者复制到输出文件夹(使用构建脚本)并通过 AppDomain.CurrentDomain.AssemblyResolve 事件选择适当的版本(检查架构使用IntPtr.Size)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-02
        • 1970-01-01
        • 2010-10-08
        • 2013-01-19
        • 2012-07-04
        • 2013-09-29
        • 2014-12-24
        相关资源
        最近更新 更多