VS根据系统自动更改引用64和32位的动态dll库

学习

大多数项目都需要编译32位和64位两种版本
VS中在配置管理器中可以直接选择X86以及X64两种模式分别生成对应版本的项目文件
但是项目引用的dll库有时候会有x64和x86两种格式,需要在生成两种版本时候加载不同的dll文件。

这里我遇到的情况是加载System.Data.SQLite.dll的数据库文件,会有区分x86和x64两种。之前切换生成64位和32位版的时候,都要删除引用并重新添加引用,非常麻烦。这里介绍一种方法可以设置一次,不需要每次都修改引用dll的路径。

首先找到解决方案中加载System.Data.SQLite.dll库的工程。找到对应的 工程名.csproj。使用文本编辑器打开 这个文件 ,这是一个使用xml方式的工程文件 。找到加载库的地方
如:

<Reference Include="System.Data.SQLite">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>lib\SQLite-64\System.Data.SQLite.dll</HintPath>
</Reference>

添加Condition选项 如:
   

    <Reference Condition=" '$(Platform)' == 'AnyCPU'" Include="System.Data.SQLite">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>lib\SQLite-86\System.Data.SQLite.dll</HintPath>
    </Reference>
    <Reference Condition=" '$(Platform)' == 'x64'" Include="System.Data.SQLite">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>lib\SQLite-64\System.Data.SQLite.dll</HintPath>
    </Reference>


这样便可以实现切换x86和x64自动切换加载动态库路径


还有一种场景是这样的:
解决方案中一个工程生成dll,另一个工程加载此工程生成的dll
除了这个工程生成x86以及x64两个版本之外,还会有debug版和release版两种情况。这里的解决方案就比较简单了
原先是这样的

    <Reference Condition=" '$(Platform)' == 'x86'" Include="ConvertTasks, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>ConvertTaskManager\ConvertTaskManager\bin\Release\ConvertTasks.dll</HintPath>
    </Reference>
    <Reference Condition=" '$(Platform)' == 'x64'" Include="ConvertTasks, Version=1.0.0.0, Culture=neutral, processorArchitecture=AMD64">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>ConvertTaskManager\ConvertTaskManager\bin\x64\Release\ConvertTasks.dll</HintPath>
    </Reference>

只需要将路径中debug或release的目录替换成$(Configuration)即可
如下:

    <Reference Condition=" '$(Platform)' == 'x86'" Include="ConvertTasks, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>ConvertTaskManager\ConvertTaskManager\bin\$(Configuration)\ConvertTasks.dll</HintPath>
    </Reference>
    <Reference Condition=" '$(Platform)' == 'x64'" Include="ConvertTasks, Version=1.0.0.0, Culture=neutral, processorArchitecture=AMD64">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>ConvertTaskManager\ConvertTaskManager\bin\x64\$(Configuration)\ConvertTasks.dll</HintPath>
    </Reference>

————————————————

从上面学习中,我的程序设置如下:

  <ItemGroup>
    <Reference Condition=" '$(Platform)' == 'AnyCPU'" Include="FunctionHelperNative">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>bin\$(Configuration)\x64\FunctionHelperNative.dll</HintPath>
    </Reference>
    <Reference Condition=" '$(Platform)' == 'x86'" Include="FunctionHelperNative, Culture=neutral, processorArchitecture=x86">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>bin\$(Configuration)\x86\FunctionHelperNative.dll</HintPath>
    </Reference>
    <Reference Condition=" '$(Platform)' == 'x64'" Include="FunctionHelperNative, Culture=neutral, processorArchitecture=x86">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>bin\$(Configuration)\x64\FunctionHelperNative.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
  </ItemGroup>

目录结构

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值