簡體   English   中英

支持多種版本的第三方庫

[英]support multiple versions of third party library

我創建了一個需要第三方API的C#應用​​程序(MyAppV1)。 我的應用程序需要使用此API的多個版本, 但一次只能使用一個版本。 我已經設置了解決方案來更改引用和對不同構建配置使用using語句,並創建了多個可執行文件,每個文件針對不同的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,因為您不知道下次要加載什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM