支持多个版本的第三方库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了支持多个版本的第三方库相关的知识,希望对你有一定的参考价值。
我创建了一个需要第三方API的C#应用程序(MyAppV1)。我的应用程序需要使用此API的多个版本,但一次只能使用一个版本。我已经设置了我的解决方案来更改引用和使用不同构建配置的语句,我创建了多个可执行文件,每个文件都针对不同的API版本。
目前我有这种情况:
- MyAppV1_ThirdPartyV1.exe使用ThirdPartyV1.dll
- MyAppV1_ThirdPartyV2.exe使用ThirdPartyV2.dll
- MyAppV1_ThirdPartyV2_5.exe使用ThirdPartyV2.dll(他们没有更改其软件次要版本的库名)
- MyAppV1_ThirdPartyV3.exe使用ThirdPartyV3.dll
我希望能够维护一个版本列表,可能在App.config中并在运行时加载相应的dll库。我很难知道从哪里开始。这是一个合适的策略吗?我不确定如何最好地处理这种情况。我的应用程序的多个版本只与引用的库不同,对我来说似乎非常笨重。
我发现的大部分信息都与支持多个框架有关,同时处理下游同一个库的两个版本的需求,或者需要同时加载两个版本。我无法找到有关如何处理我的特定情况的信息。
答案
这在项目层面是可能的。您可以在解决方案中构建不同的配置,当您添加如下所示的引用时,它将采用所需的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,因为您不知道下次要加载什么。
以上是关于支持多个版本的第三方库的主要内容,如果未能解决你的问题,请参考以下文章