原来使用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,processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\libs\sqlite\System.Data.sqlite.dll</HintPath>
</Reference>
只是增加了一个Condition的限制条件,表示只在平台类型位Anycpu的时候,按照这个路径引用dll
复制上面的配置内容,并按照如下进行修改,设置在x64平台的生成时引用的dll路径
<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的安装程序的制作不太好使,我不太清楚,涉及到这方面的同学,再仔细查查看。
不过,我这里提供一个可行的解决方案,那就是不要将整个项目制作到安装程序中,只是制作一个最基本的安装程序,然后通过升级来保证最新。
如果是在没有网络的环境中,那也可以将编译产出单独解压到安装目录下,以避免将整个解决方案制作成安装包。
您可能感兴趣的文章:
- Linux动态库函数的详解
- Linux静态库与动态库实例详解
- 详解dll动态库的开发与调用及文件的读写小程序
- android studio2.3如何编译动态库的过程详解
- Linux下g++编译与使用静态库和动态库的方法
- Linux环境g++编译GDAL动态库操作方法
- 解决Linux程序编译链接动态库版本的相关问题
- xcode 详解创建静态库和动态库的方法
- 浅谈Linux C语言动态库及静态库
- c++实现加载so动态库中的资源
- linux 程序、动态库、静态库内部添加版本号和编译时间详解
- 从源码编译Android系统的Java类库和JNI动态库的方法
- C#调用非托管动态库中的函数方法
- 动态库调用静态库示例讲解
- linux生成(加载)动态库静态库和加载示例方法
- 深入探讨Linux静态库与动态库的详解(一看就懂)
- 分析Windows和Linux动态库
- 在动态库和静态库中使用模板(dynamic libraries ,static libraries)