当前位置: 首页 > 编程笔记 >

Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法

林国安
2023-03-14
本文向大家介绍Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法,包括了Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法的使用技巧和注意事项,需要的朋友参考一下

原来使用Win7的32位系统,进行C#工程的开发,后来重装系统,换成了win7的64位系统

调试原来的工程,由于在其中引用了“SQLite”的32位的dll,导致在64为位下程序无法运行(但是编译可以通过)

后来通过修改工程文件(.csproj),在其中设置引用的条件,解决了问题

打开引用了SQLite的工程(例如叫做info)的工程文件(info.csproj),找到对SQLite引用的语句,类似如下的代码


<Reference Include="System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">

<SpecificVersion>False</SpecificVersion>

<HintPath>..\..\libs\SQLite\System.Data.SQLite.dll</HintPath>

</Reference>

这里指定了引用的库的名称,路径等信息,将上面的配置内容,修改如下


<Reference Condition=" '$(Platform)' == 'AnyCPU' " Include="System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">

<SpecificVersion>False</SpecificVersion>

<HintPath>..\..\libs\SQLite\System.Data.SQLite.dll</HintPath>

</Reference>

只是增加了一个Condition的限制条件,表示只在平台类型位AnyCPU的时候,按照这个路径引用dll

复制上面的配置内容,并按照如下进行修改,设置在x64平台的生成时引用的dll路径

<Reference Condition=" '$(Platform)' == 'x64' " Include="System.Data.SQLite.x64, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=AMD64">

<SpecificVersion>False</SpecificVersion>

<HintPath>..\..\libs\SQLite\System.Data.SQLite.x64.dll</HintPath>

</Reference>

最后,说一下怎样在VS中设置不同的生成平台

在工具栏的“解决方案平台”(一般这里会显示着“Any CPU”)下拉框中选择“配置管理器”,在其中添加想要的平台类型(一般就在x64,x86,Itanium中选择,不要修改默认名称)

然后在窗口下部的“项目上下文中”,在对应的项目(这里仅info项目,其他的保持AnyCPU不变)中修改平台类型(修改为X64)

然后,配置到这里,可能在项目文件中,对应新增的平台类型的一些设置不完整(我遇到编译的时候提示“OutputPath没有设置”),这个时候,进入vs的项目属性界面,稍微修改一下(改成别的,保存,再改回来)这些设置

ok,这个时候,应该就可以根据平台的类型不同,引用到对应的dll了,

在网上找到的资料说,这种方法对于msi的安装程序的制作不太好使,我不太清楚,涉及到这方面的同学,再仔细查查看。

不过,我这里提供一个可行的解决方案,那就是不要将整个项目制作到安装程序中,只是制作一个最基本的安装程序,然后通过升级来保证最新。

如果是在没有网络的环境中,那也可以将编译产出单独解压到安装目录下,以避免将整个解决方案制作成安装包。

 类似资料:
  • 问题内容: 使用Java本机接口时,我遇到了一个导致此错误的问题。我相信这是因为我使用MinGW编译了.dll,而我的系统是64位的,因此我的Java运行于64位,而MinGW编译为32位的.dll。无论如何,有没有强制我的Java在32位上运行? 问题答案: 您将必须安装32位JVM,然后才能运行代码。 如果要分发应用程序,则将要构建DLL的32位和64位版本。然后,使用以下技术来加载正确的DL

  • 本文向大家介绍C#中实现在32位、64位系统下自动切换不同的SQLite dll文件,包括了C#中实现在32位、64位系统下自动切换不同的SQLite dll文件的使用技巧和注意事项,需要的朋友参考一下 直接上代码:

  • 如果操作系统是64位,我想安装一个32位的DLL到文件夹和64位的DLL到文件夹并分别注册它们。如果是32位操作系统,我只想将文件复制到正常程序文件夹并注册。 如何在Inno安装程序中执行此操作?64位DLL也会被64位程序注册吗? 这是我到目前为止的代码。它在 32 位操作系统上工作正常,但在 64 位操作系统上,它会转储 中的两组文件。 我已经看过示例,但它告诉如何进行32位或64位安装,而不

  • 问题内容: 在Java中,是否保证int始终为32位,而长为64位,而不管体系结构是32位还是64位? 问题答案: Java是平台无关的。所以是32位,并且是64位的。

  • 我已经在Java工作了8个月。目前,我正在使用JNA加载一个第三方DLL,它在32bit WinXP和32bit Win7机器上运行良好。 我将使用procexp来查找是否缺少任何依赖项。我会相应地更新这篇文章。 请提供您的专家建议。提前感谢!

  • 问题内容: 要启动旧版应用程序,我们通过jnlp使用Java WebStart。 我们希望支持64位Java客户端,但是我们的库之一是依赖于体系结构的。 我们想到做类似的事情: 这是行不通的,因为参数sun.arch.data.model =“ 64”用于设置参数而不是对其进行测试。 有任何想法吗? 问题答案: 在文档中对此进行了解释,位于:http : //docs.oracle.com/jav