gpt4 book ai didi

asp.net - 根据进程位数使用 32 位或 64 位特定的 dll

转载 作者:行者123 更新时间:2023-12-04 16:01:07 24 4
gpt4 key购买 nike

我需要引用一个 DLL,它有 2 个版本(一个用于 32 位,一个用于 64 位)。
我的目标是构建一个适用于 32 位和 64 位系统的 Web 应用程序。

我想过默认引用32位程序集并使用AssemblyResolve事件加载64位版本(如果加载32位版本失败):

static void Main(string[] args)
{
AppDomain.CurrentDomain.AssemblyResolve += _AssemblyResolve;
// Try LoadAssembly ...
}

static System.Reflection.Assembly _AssemblyResolve(object sender, ResolveEventArgs args)
{
var path = string.Format(@"...\lib_x64\{0}.dll", args.Name);
return Assembly.LoadFrom(path);
}

但即使发生 BadImageFormatException,也不会调用 _AssemblyResolve 处理程序。有没有其他方法可以实现建议的行为?

最佳答案

在我看来,最直接但不太灵活的方法是使用 Condition 在 csproj 文件中明确指定特定于平台的引用。 :

<ItemGroup Condition=" '$(Platform)' == 'x86' ">
<Reference Include="MyAssemblyx86">

您也可以使用 Assembly.Load(AssemblyName) 动态执行此操作方法重载。
参数类型为 AssemblyName这暴露了属性(property) AssemblyName.ProcessorArchitecture可以设置为无、MSIL、X86、X64、IA64、AMD64

您还可以查看的一件事是 Publisher Policy File功能和命令行参数 /platform:processorArchitecture
  • Introduction to Publisher policy file
  • How to: Create a Publisher Policy
  • 关于asp.net - 根据进程位数使用 32 位或 64 位特定的 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7538751/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com