C# .NET项目中64位版本DLL的要求 介绍

C# .NET项目中64位版本DLL的要求 介绍,c#,.net,dll,64-bit,32bit-64bit,C#,.net,Dll,64 Bit,32bit 64bit,我正在从事一个.net项目,其中我使用一些32位版本的DLL。DLL列表包括: 系统* 微软* AWSSDK* Npgsql.dll Newtonsoft.Json.dll 其他供应商提供的一些其他DLL (DLL列表实际上太长了,如果不让它太长的话,就不能附在这篇文章中。) 要求 我只需要64位版本的DLL,目前我手头只有32位版本的DLL 我尝试过的事情 我使用名为SigCheck的工具验证了DLL的版本 我尝试使用以下方法查找/转换DLL版本: 我在internet和NuGet Packa

我正在从事一个.net项目,其中我使用一些32位版本的DLL。DLL列表包括:

  • 系统*
  • 微软*
  • AWSSDK*
  • Npgsql.dll
  • Newtonsoft.Json.dll
  • 其他供应商提供的一些其他DLL
  • (DLL列表实际上太长了,如果不让它太长的话,就不能附在这篇文章中。)

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

    我尝试过的事情 我使用名为SigCheck的工具验证了DLL的版本

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

  • 我在internet和NuGet Package Manager上搜索过,但没有找到64位DLL
  • 我尝试通过更改项目属性下的以下设置将项目重新编译为64位: -构建->平台目标->x64
  • 编译后,项目DLL被转换为64位。但是,其余项目DLL的版本没有更改

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

    有人能给我们发一个链接来找到重新编译的64位版本的DLL吗


    请注意,我使用的是.NET framework 4.6,托管的.NET DLL通常与平台无关。因此,对于大多数库,您不需要担心它,只需使用nuget来引用库,您就可以很好地使用它了。JIT编译器将负责根据平台将程序集编译为64/32位

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


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

    托管.Net DLL通常与平台无关。因此,对于大多数库,您不需要担心它,只需使用nuget来引用库,您就可以很好地使用它了。JIT编译器将负责根据平台将程序集编译为64/32位

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


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

    hrm。。。只需将你的应用程序切换到x64(或更好的事件,任何cpu)并更新你的nugets?请起来投票这个问题,我有一个类似的问题,我需要用于IIS中Web应用程序防火墙的x64位DLL。@谢谢你的评论。我尝试执行卸载Newtonsoft.json.dll的步骤。将应用程序更改为x64。清理项目。再次从Nuget安装Newtonsoft.json.dll。最后,检查了两个dll版本。Project.dll为64位Newtonsoft.json.dll为32位HRM。。。只需将你的应用程序切换到x64(或更好的事件,任何cpu)并更新你的nugets?请起来投票这个问题,我有一个类似的问题,我需要用于IIS中Web应用程序防火墙的x64位DLL。@谢谢你的评论。我尝试执行卸载Newtonsoft.json.dll的步骤。将应用程序更改为x64。清理项目。再次从Nuget安装Newtonsoft.json.dll。最后,检查了两个dll版本。Project.dll是64位的Newtonsoft.json.dll是32位的。我用一些dll检查了CorFlags工具,发现它们的32bitreq标志是0。这是否意味着它们是64位DLL?此外,在与供应商联系之前,我是否可以尝试自己将DLL版本更改为64位?如果未设置32位标志,则库应与平台无关,即“任何CPU”。绝大多数图书馆都应该如此。必须从源代码处重新编译本机库,因为它们包含实际的x86/x64指令,而不是IL指令。我检查了CorFlags工具和一些DLL,发现它们的32bitreq标志为0。这是否意味着它们是64位DLL?此外,在与供应商联系之前,我是否可以尝试自己将DLL版本更改为64位?如果未设置32位标志,则库应与平台无关,即“任何CPU”。绝大多数图书馆都应该如此。必须从源代码重新编译本机库,因为它们包含实际的x86/x64指令,而不是IL指令。