[英]support multiple versions of third party library
我創建了一個需要第三方API的C#應用程序(MyAppV1)。 我的應用程序需要使用此API的多個版本, 但一次只能使用一個版本。 我已經設置了解決方案來更改引用和對不同構建配置使用using語句,並創建了多個可執行文件,每個文件針對不同的API版本。
目前我有這種情況:
我希望能夠維護一個版本列表,也許在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,因為您不知道下次要加載什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.