Visual Studio加载正确的(x86或x64)dll

22

我正在x86的Visual Studio上工作。我希望可以同时构建我的应用程序支持x32和x64。但是我需要使用sqlite .net连接器,它有一个用于x86应用程序的dll和另一个用于x64应用程序的dll。

当我的配置为x64时,如何配置我的Visual Studio来加载一个引用,而当我的配置为x86时加载另一个引用呢?

3个回答

23

在您的项目文件中,在引用中使用MSBUILD条件语句

<Reference 
       Include="SomeAssembly86, Version=0.85.5.452, Culture=neutral, PublicKeyToken=41b332442f1101cc, processorArchitecture=MSIL"  
         Condition=" '$(Platform)' == 'AnyCPU' ">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\Dependencies\SomeAssembly.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference 
         Include="SomeOtherAssembly, Version=0.85.5.999, Culture=neutral, PublicKeyToken=41b332442f1101cc, processorArchitecture=MSIL" 
         Condition=" '$(Platform)' == 'x64' ">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\Dependencies\SomeOtherAssembly.dll</HintPath>
      <Private>False</Private>
    </Reference>

10

与Preet Sangha的答案相比,这个回答更简单,加载项目时不会产生警告,并且只有被条件接受的dll会出现在“解决方案资源管理器”中。因此,总体上看起来更加清洁,尽管更为微妙。(在Visual Studio 2010中进行了测试。)

<Reference Include="p4dn" Condition="$(Platform) == 'x86'">
  <HintPath>..\..\ThirdParty\P4.Net\clr4\x86\p4dn.dll</HintPath>
</Reference>
<Reference Include="p4dn" Condition="$(Platform) == 'x64'">
  <HintPath>..\..\ThirdParty\P4.Net\clr4\x64\p4dn.dll</HintPath>
</Reference>

0
你也可以将你的应用程序编译成“任何 CPU”,并动态选择要加载的 DLL。

你需要关注挂钩事件AppDomain.CurrentDomain.AssemblyResolve。然后,您可以使用Assembly.LoadFrom从任何位置加载任何DLL(例如System.Data.SQLite.dll)来解决它。您甚至可以将DLL的两个版本作为嵌入式资源一起发布。 - antsyawn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接