【问题标题】:Requirement of 64-bit version DLLs in a .NET project.NET 项目中 64 位版本 DLL 的要求
【发布时间】:2020-12-01 20:44:02
【问题描述】:

简介

我正在开发一个 .net 项目,其中我使用了一些 32 位版本的 DLL。 DLL 列表是:

  1. 系统.*
  2. 微软.*
  3. AWSSDK.*
  4. Npgsql.dll
  5. Newtonsoft.Json.dll
  6. 来自其他供应商的一些其他 dll

(DLL 列表实际上太长了,无法在不使其太长的情况下附加到此帖子中。)

要求

我只需要 64 位版本的 DLL,目前我手头只有 32 位版本的 DLL。

我尝试过的事情

我使用名为 SigCheck 的工具验证了 DLL 的版本。

我尝试使用以下方法查找/转换 DLL 版本:

  1. 我在 Internet 和 NuGet 包管理器上进行了搜索,但找不到 64 位 DLL。
  2. 我尝试通过更改项目属性下的以下设置将项目重新编译为 64 位: - 构建 -> 平台目标 -> x64

编译后,项目 DLL 被转换为 64 位。但是,其余项目 DLL 的版本没有改变。

问题

如果有人可以分享将 32 位版本 DLL 转换为 64 位版本的文档链接/步骤,我将不胜感激?

谁能给我们一个链接来找到给定 DLL 的重新编译的 64 位版本?

请注意,我使用的是 .NET framework 4.6

【问题讨论】:

  • hrm...只需将您的应用程序切换到 x64(或更好的事件,任何 cpu)并更新您的 nugets ?
  • 请对这个问题投赞成票,我也有类似的问题,我需要 IIS 中的 Web 应用程序防火墙的 x64 位 dll。
  • @TheGeneral 感谢您的评论。我尝试执行卸载 Newtonsoft.json.dll 的步骤。将应用程序更改为 x64。清理了项目。从 Nuget 再次安装 Newtonsoft.json.dll。最后,检查了两个 dll 版本。 Project.dll 是 64 位 Newtonsoft.json.dll 是 32 位

标签: c# .net dll 64-bit 32bit-64bit


【解决方案1】:

托管的 .Net dll 通常与平台无关。因此,对于大多数库,您无需担心,只需使用 nuget 来引用这些库,就可以了。 JIT 编译器会根据平台将程序集编译为 64/32 位。

您在编译 dll 时指定的平台目标仅在 dll 中设置一个标志。可以使用 CorFlags 更改此标志,但如果它具有 32 位标志,则可能是有原因的。

当您需要使用本机程序集(即 c++ dll)时,通常会出现大问题。这些需要特定于平台。最好的解决方案是获取这些 DLL 的 64 位版本,但您需要从库供应商处获取它们并更新项目中的引用。如果您无法获得 64 位版本,最常见的解决方法是在单独的 32 位进程中运行该库。

【讨论】:

  • 我用一些 DLL 检查了 CorFlags 工具,发现它们的 32bitreq 标志为 0。这是否意味着它们是 64 位 dll?另外,在联系供应商之前,有什么方法可以让我自己尝试将 DLL 版本更改为 64 位?
  • 如果未设置 32 位标志,则库应该与平台无关,即“任何 CPU”。这应该是绝大多数图书馆的情况。原生库必须从源代码重新编译,因为它们包含实际的 x86/x64 指令而不是 IL 指令。
猜你喜欢
  • 2011-09-02
  • 2014-08-16
  • 2014-05-29
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 2013-07-25
相关资源
最近更新 更多