C# 根据 x86 或 x64 切换依赖项

C# Switch dependencies depending on x86 or x64

我们有一个 x86 或 x64 的第三方 dll,现在我们必须根据 TargetPlatform 将 x64 dll 更改为 x86。谁能告诉我怎么做?

第一次尝试是用 post 构建脚本覆盖 dll。

使用配置管理器,我们可以使用 x86、x64 标记构建,使用宏 $(PlatformName) 我们可以命名 dll 相对于平台的路径 (x64/x86)

重要的是,宏必须直接在 *.csproj 文件中设置,例如:

<Reference Include="DLLNAME, Version=4.9.0.0, Culture=neutral, PublicKeyToken=TOKEN, 
      processorArchitecture=$(PlatformName)">
      <HintPath>Lib$(PlatformName)\DLLNAME.dll</HintPath>
    </Reference>

此外,如果有一个插件需要编译到主程序文件夹中,则必须直接在*.csproj 文件中更改构建路径。例如:

 <OutputPath>..\..\bin$(PlatformName)\Debug\Features\</OutputPath>

那是因为 VS 转义了 '$('')'

编辑: 太快。 <OutputPath> 不理解宏。因此,我们必须更改每个构建配置的输出路径。例如:

  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>..\..\bin\x86\Debug\Features\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
    <Prefer32Bit>true</Prefer32Bit>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
    <OutputPath>..\..\bin\x86\Release\Features\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
    <Prefer32Bit>true</Prefer32Bit>
  </PropertyGroup>

编辑 2:仅对于 x64 或 x86 依赖项,有条件属性可以将某些 cs 文件与 x86 或 x64 分开,例如:

<Reference Condition="'$(Platform)'=='x64'" Include="STPadLibNet">
  <HintPath>Lib\x64\DLLNAME.dll</HintPath>
</Reference>

对于某些课程,您可以像这样使用它:

<Compile Condition="'$(Platform)'=='x64'" Include="MyClass.cs" />