最近在使用Noesis.Javascript.dll,但是这个DLL是有X86与X64二种版本的,我自己的电脑是64位的,但是别人的电脑是32位的。所以在别人那里使用的时候出了问题。
在VS里怎么引用二个版本的DLL了。在网上搜索了资料。我修改的对应代码如下:(资料在后面,自己可以看)
<Reference Condition=" '$(Platform)' == 'AnyCPU' " Include="Noesis.Javascript, Version=0.0.0.0, Culture=neutral, PublicKeyToken=ae36d046c7f89f85, processorArchitecture=AMD64"> <SpecificVersion>False</SpecificVersion> <HintPath>libx86Noesis.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>libx86Noesis.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>libx64Noesis.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:whateverx86whatever.dll
C:whateverx64whatever.dll
您只需编辑这个协议的.csproj文件:
<HintPath>C:whateverx86whatever.dll</HintPath>
为:
<HintPath>C:whatever${Platform}whatever.dll</HintPath>
然后,您应该能够建立您的项目针对这两个平台,和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,只是使用的节点不同。这里略过。