在Visual Studio项目中根据系统平台自动引用32或64位的DLL
2013-08-05 13:30
330 查看
最近在使用Noesis.Javascript.dll,但是这个DLL是有X86与X64二种版本的,我自己的电脑是64位的,但是别人的电脑是32位的。所以在别人那里使用的时候出了问题。
在VS里怎么引用二个版本的DLL了。在网上搜索了资料。我修改的对应代码如下:(资料在后面,自己可以看)
最近把系统从WIN2008(32位)更换成WIN2008R2,在64位系统下使用原来在32位系统下开发的程序出现了异常。经调试原来是由于在其中引用了“System.Data.SQLite”的32位的dll,导致在64位下程序无法运行(但是编译可以通过) powered by 25175.net
解决步骤:
1.从http://sourceforge.net/projects/sqlite-dotnet2/files/ 下载最新的X64位DLL,编译后在64位系统上可以正常运行了,但却不能同时在32位的系统上运行。
2.寻找如何能使项目自动适应不同的平台的解决方案。
解决方案:
通过更改csproj(C#项目文件的扩展名)文件配置进行对应平台的自适应,其中${Platform}代表对应的平台
方法1.HintPath中使用${Platform}做为变量替换路径
假设你的DLL有两个平台构建,以及他们在以下位置是:
您只需编辑这个协议的.csproj文件:
为:
然后,您应该能够建立您的项目针对这两个平台,和MSBuild会寻求其他选择的平台,为正确的目录。
方法2:Reference节点增加Condition条件
a.将32位平台Reference节点增加Condition条件
b.复制32位平台Reference节点,并改为64位平台,将HintPath节点中DLL路径更换为对应的64位版本
方法3:ItemGroup节点增加Condition条件 ,其实现同方法2,只是使用的节点不同。这里略过。
在VS里怎么引用二个版本的DLL了。在网上搜索了资料。我修改的对应代码如下:(资料在后面,自己可以看)
<Reference Condition=" '$(Platform)' == 'AnyCPU' " Include="Noesis.Javascript, Version=0.0.0.0, Culture=neutral, PublicKeyToken=ae36d046c7f89f85, processorArchitecture=AMD64"> <SpecificVersion>False</SpecificVersion> <HintPath>lib\x86\Noesis.Javascript.dll</HintPath> </Reference> <Reference Condition=" '$(Platform)' == 'x86' " Include="Noesis.Javascript, Version=0.0.0.0, Culture=neutral, PublicKeyToken=ae36d046c7f89f85, processorArchitecture=AMD64"> <SpecificVersion>False</SpecificVersion> <HintPath>lib\x86\Noesis.Javascript.dll</HintPath> </Reference> <Reference Condition=" '$(Platform)' == 'x64' " Include="Noesis.Javascript, Version=0.0.0.0, Culture=neutral, PublicKeyToken=ae36d046c7f89f85, processorArchitecture=AMD64"> <SpecificVersion>False</SpecificVersion> <HintPath>lib\x64\Noesis.Javascript.dll</HintPath> </Reference>
最近把系统从WIN2008(32位)更换成WIN2008R2,在64位系统下使用原来在32位系统下开发的程序出现了异常。经调试原来是由于在其中引用了“System.Data.SQLite”的32位的dll,导致在64位下程序无法运行(但是编译可以通过) powered by 25175.net
解决步骤:
1.从http://sourceforge.net/projects/sqlite-dotnet2/files/ 下载最新的X64位DLL,编译后在64位系统上可以正常运行了,但却不能同时在32位的系统上运行。
2.寻找如何能使项目自动适应不同的平台的解决方案。
解决方案:
通过更改csproj(C#项目文件的扩展名)文件配置进行对应平台的自适应,其中${Platform}代表对应的平台
方法1.HintPath中使用${Platform}做为变量替换路径
假设你的DLL有两个平台构建,以及他们在以下位置是:
C:\whatever\x86\whatever.dll C:\whatever\x64\whatever.dll[/code]
您只需编辑这个协议的.csproj文件:
<HintPath>C:\whatever\x86\whatever.dll</HintPath>[/code]
为:
<HintPath>C:\whatever\${Platform}\whatever.dll</HintPath>[/code]
然后,您应该能够建立您的项目针对这两个平台,和MSBuild会寻求其他选择的平台,为正确的目录。
方法2:Reference节点增加Condition条件
a.将32位平台Reference节点增加Condition条件
<Reference Condition=" '$(Platform)' == 'AnyCPU' "……
b.复制32位平台Reference节点,并改为64位平台,将HintPath节点中DLL路径更换为对应的64位版本
<Reference Condition=" '$(Platform)' == 'x64' ……
方法3:ItemGroup节点增加Condition条件 ,其实现同方法2,只是使用的节点不同。这里略过。
相关文章推荐
- 在Visual Studio项目中根据系统平台自动引用32或64位的DLL
- Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法
- ATM自动取款机终端系统(基于visual studio 2015与Sql server 2014平台的C#项目)
- Visual Studio使用技巧笔记(引用程序集自动复制dll到引用项目目录)
- 在Visual Studio开发的项目中引用GAC中的dll
- windows 32/64位系统 VS2010调用MATLAB2012生成的dll方法
- WIN10系统32,64位系统自动激活版
- (32/64位系统)没有找到cxcore100.dll或者缺少*.dll文件的解决办法
- JS根据浏览器32/64平台动态加载32/64位OCX控件
- 精准测试系统推行遇到部分项目32和64位使用问题,没有使用
- Visual Studio中的引用项目和直接引用DLL文件
- 缺失Dll也能运行!PHP环境神器,无限自定义,全自动匹配32位和64位系统
- 64位系统上设置编译平台为x86的项目编译在特定的情况下比如当一个窗体上放有包含了图像的ImageList之后,ResGen就会产生这种问题
- 64位系统上设置编译平台为x86的VS2008项目升级到VS2010后编译失败的原因和解决办法
- C#中实现在32位、64位系统下自动切换不同的SQLite dll文件
- 32位系统硬盘安装32/64位win7/win8(图文详解)
- 在项目中引用Service References,自动生成的.cs文件
- XXX管理平台系统——项目风险
- Python项目设计计划——树莓派自动浇花系统
- XXX管理平台系统——项目经理能力