【问题标题】:Visual Studio: Different DLLs for configurationsVisual Studio:用于配置的不同 DLL
【发布时间】:2010-01-30 21:40:06
【问题描述】:

我想制作我的应用程序的 x86 和 x64 版本,因为我使用的一些库在 x86 和 x64 上存在差异(例如 SQLite)。 我为目标操作系统“x64”的发布版本做了一个新配置。

有没有办法为配置定义不同的 DLL,例如对 x86 版本使用 SQLite.dll,对 x64 版本使用 SQLite64.dll?

  1. 很遗憾,由于那些不兼容 x64 的 DLL,我不能使用默认的“任何平台”选项。
  2. 我想支持真正的 x64,而不是在 x64 操作系统上运行 32 位应用程序。

【问题讨论】:

  • 这是一个很好的问题,我有一个类似的问题,我们使用的第 3 方 .dll 具有特定的 32 位和 64 位版本,因此对于我的大多数代码来说这不是问题,因为它是托管的并以 CLR 为目标 - 为特定目标获取正确版本的 .dll 是我尚未解决的问题

标签: visual-studio dll x86 64-bit


【解决方案1】:

您可以向项目文件中的 dll 引用添加条件,但不能使用 Visual Studio 执行此操作 - 您必须手动编辑项目文件。请参阅this 了解如何操作。

您需要做的是仅在 32 位构建配置中包含对 32 位 dll 的引用,并在 64 位构建配置中包含对 64 位 dll 的引用。

【讨论】:

  • 以上是正确的。您可以手动编辑项目文件并添加 Condition 属性。
  • 哇,我什至不知道我正在寻找这个问题的答案,但那太棒了。我认为在这种情况下,条件应该在 $(Platform) 上是否正确,因为它与调试/发布无关?
  • @Peter:是的,您需要在项目文件的相关节点中添加Condition="$(Platform) == 'x64'"之类的内容。
  • 类似 Condition="$(Platform) == 'x64'" 的东西?这是正确的语法吗?
  • @Kai:语法看起来是正确的。您需要根据需要不同的内容进行设置。如果引用是 x86 和 x64 之间的不同之处,请将两个 dll 添加为引用,然后编辑项目文件并将 Condition="$(Platform) == 'x86'" 放入 x86 dll 的引用节点,将 Condition="$(Platform) == 'x64'" 放入 x64 dll 的引用节点。
【解决方案2】:

您需要对项目文件中的 dll 引用设置条件。
这将导致 Visual Studio 在您更改活动配置时重新检查条件和引用。
只需为每个配置添加一个条件。

例子:

 <ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
    <Reference Include="DLLName">
      <HintPath>..\DLLName.dll</HintPath>
    </Reference>
    <ProjectReference Include="..\MyOtherProject.vcxproj">
      <Project>{AAAAAA-000000-BBBB-CCCC-TTTTTTTTTT}</Project>
      <Name>MyOtherProject</Name>
    </ProjectReference>
  </ItemGroup>

【讨论】:

    【解决方案3】:

    哪个VS版本?您正在使用哪种语言进行开发? 如果是本机(=非托管)C++,几乎所有设置,包括使用的库,都可以针对每个配置进行不同的设置。在项目属性对话框的顶部,只需选择您要修改的配置设置。

    【讨论】:

      【解决方案4】:

      存在csproj文件的内置关键字ChooseWhen

      下面的例子:

      <Choose>
        <When Condition="'$(Configuration)' == 'DebugConversion'">
          <ItemGroup>
              <ProjectReference Include="..\OfficeConverer\WordConverter\OfficeConverter.csproj">
                  <Project>{b0cbxxxx-xxxx-xxxx-xxxx-7f3353aaxxxx}</Project>
                  <Name>Saur.OfficeConverter</Name>
              </ProjectReference>
          </ItemGroup>
        </When>
        <Otherwise>
          <ItemGroup>
              <Reference Include="OfficeConverter, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
                  <HintPath>..\packages\OfficeConverter.1.0.1\lib\net45\OfficeConverter.dll</HintPath>
              </Reference>
          </ItemGroup>
        </Otherwise>
      </Choose>
      

      Bref说明:在Visual Studio中选择“DebugConversion”时,项目会在解决方案中加载一个名为OfficeConverter的项目,否则(如默认“Debug”/“Release”)会恢复并加载一个Nuget Dll。

      【讨论】:

        猜你喜欢
        • 2011-04-03
        • 2023-03-16
        • 2012-07-10
        • 2011-12-03
        • 2021-02-25
        • 2018-04-04
        • 1970-01-01
        • 2011-06-16
        • 1970-01-01
        相关资源
        最近更新 更多