这在项目级别是可能的。您可以在解决方案中构建不同的配置,当您添加如下引用时,它将采用所需的 DLL
<Choose>
<When Condition="'$(Configuration)|$(Platform)'=='YourSpecialConfiguration1|x64'"><!-- attention here -->
<ItemGroup>
<Reference Include="your.dllv1.name">
<HintPath>yourDllPath_v1\your.dllv1.dll</HintPath><!-- attention here -->
<Private>true</Private>
</Reference>
<!-- more references here -->
</ItemGroup>
</When>
<When Condition="'$(Configuration)|$(Platform)'=='YourSpecialConfiguration2|x64'"><!-- attention here -->
<ItemGroup>
<Reference Include="your.dllv2.name">
<HintPath>yourDllPath_v2\your.dllv2.dll</HintPath><!-- attention here -->
<Private>true</Private>
</Reference>
<!-- more references here -->
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<Reference Include="your.dllname">
<HintPath>yourRegularPath\your.dllname.dll</HintPath><!-- attention here -->
<Private>true</Private>
</Reference>
<!-- AND more references here -->
</ItemGroup>
</Otherwise>
</Choose>
您在上面看到的 - 选项 1。
选项 2 - 每个版本的不同项目。缺点-如果添加文件或引用,则需要添加到每个项目中
选项 3 - 添加所有引用,但为每个引用声明不同的命名空间别名(在引用属性窗口中)。然后在代码中进行条件编译,如
ISomething myVar;
#if V1
myVar = new namespace1.ClassX();
#elif V2
myVar = new namespace2.ClassX();
#else
. . . .
#endif
最后:
“我希望能够维护一个版本列表,可能在 App.config 中,并在运行时加载适当的 dll 库。”
- 你可能不需要这些。您只需要生成具有不同版本的软件包。在运行时加载将需要更多的编码工作,同时仍然提供所有 DLL,因为您不知道下次要加载什么。