代码之家  ›  专栏  ›  技术社区  ›  Carlos

VS2010中有条件引用的问题[重复]

  •  0
  • Carlos  · 技术社区  · 14 年前

    我有一个32/64位的项目,它有相应的32/64位依赖项。我希望能够切换配置并使用正确的引用,但我不知道如何告诉Visual Studio使用与体系结构相关的依赖项。

    也许我的方法不对,但我希望能够在配置下拉列表中的x86和x64之间切换,并使引用的DLL是正确的位。

    0 回复  |  直到 11 年前
        1
  •  -1
  •   Jeff H    5 年前

    以下是我在上一个项目中所做的工作,该项目需要手动编辑.csproj文件。对于不同的二进制文件,您还需要单独的目录,最好是彼此的兄弟目录,并且与目标平台同名。

    将单个平台的引用添加到项目后,在文本编辑器中打开.csproj。在第一次之前 <ItemGroup> 中的元素 <Project> 元素,添加以下代码,这将有助于确定在哪个平台上运行(和构建)。

    <!-- Properties group for Determining 64bit Architecture -->
    <PropertyGroup>
      <CurrentPlatform>x86</CurrentPlatform>
      <CurrentPlatform Condition="'$(PROCESSOR_ARCHITECTURE)'=='AMD64' or '$(PROCESSOR_ARCHITEW6432)'=='AMD64'">AMD64</CurrentPlatform>
    </PropertyGroup>
    

    然后,对于特定于平台的引用,您可以进行如下更改:

    <ItemGroup>
      <Reference Include="Leadtools, Version=16.5.0.0, Culture=neutral, PublicKeyToken=9cf889f53ea9b907, processorArchitecture=x86">
        <SpecificVersion>False</SpecificVersion>
        <HintPath>..\..\Lib\Leadtools\$(CurrentPlatform)\Leadtools.dll</HintPath>
      </Reference>
      <Reference Include="Leadtools.Codecs, Version=16.5.0.0, Culture=neutral, PublicKeyToken=9cf889f53ea9b907, processorArchitecture=x86">
        <SpecificVersion>False</SpecificVersion>
        <HintPath>..\..\Lib\Leadtools\$(CurrentPlatform)\Leadtools.Codecs.dll</HintPath>
      </Reference>
      <Reference Include="Leadtools.ImageProcessing.Core, Version=16.5.0.0, Culture=neutral, PublicKeyToken=9cf889f53ea9b907, processorArchitecture=x86">
        <SpecificVersion>False</SpecificVersion>
        <HintPath>..\..\Lib\Leadtools\$(CurrentPlatform)\Leadtools.ImageProcessing.Core.dll</HintPath>
      </Reference>
      <Reference Include="System" />
      <Reference Include="System.Core" />
      <Reference Include="System.Data.Entity" />
      <!--  Other project references -->
    </ItemGroup>
    

    注意使用 $(CurrentPlatform) 我们在上面定义的属性。相反,您可以使用条件来包含哪个平台的程序集。您还需要:

    • 更换 $(PROCESSOR_ARCHITEW6432) $(PROCESSOR_ARCHITECTURE) 具有 $(Platform) 只考虑项目的目标平台
    • 更改平台确定逻辑以适合当前计算机,这样就不会构建/引用要在32位平台上执行的64位二进制文件。

    我本来是为工作中的一个内部Wiki写的,但是,我修改了它并发布了 full process to my blog ,如果您对详细的分步说明感兴趣。