在Visual Studio项目中根据系统平台自动引用32或64位的DLL

最近在使用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>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 

您只需编辑这个协议的.csproj文件:

<HintPath>C:\whatever\x86\whatever.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,只是使用的节点不同。这里略过。

你可能感兴趣的:(C#)