2011-07-12 44 views
1

爲了支持CRM SDK我有2個主要版本有兩個具有相同的代碼,但不同的庫2個項目。Visual Studio:如何使用基本代碼?

它們在版本中唯一改變的只是導入的庫,這不僅適用於默認的WebProject,而且適用於所有我正在使用的類項目。

我怎麼能輕易有相同的代碼,並可以測試/構建不同的版本?

舉一個例子:

我有我的解決方案:

Class Library: `Authentication.7` 
Class Library: `Authentication.6` 
Class Library: `Shared.WebControls` 
Class Library: `Shared.Utilites` 
Web Project: `MyWebApp` 

Authentication.6的一部分,真正從Authentication.7庫具有不同的代碼認證是這些主要版本之間有很大不同,所有其他項目剛剛從CRM的SDK引用的所有需要​​DLL的。

是否有建立/測試,將加載正確的references,所以我仍然可以使用基本代碼的方法嗎?

你們有什麼在這種情況下怎麼辦?我很難忍受2個基本代碼: -/

回答

1

只要基本代碼駐留在具有相同名稱但具有不同版本的程序集中,就可以嘗試設置運行時的assemblyBindings。

因此,可以說你的組件對兩個基本的DLL的早期版本編譯的,但你希望你同樣裝配到和基礎的dll的較新版本的工作,以下內容添加到您的應用程序| web.config文件

<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="SoCore" 
      publicKeyToken="bdda2d694ae22a86" 
      culture="en-us" /> 
     <bindingRedirect oldVersion="7.0.3000.0-7.0.4002.0" newVersion="7.0.4003.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="SoDatabase" 
      publicKeyToken="bdda2d694ae22a86" 
      culture="en-us" /> 
     <bindingRedirect oldVersion="7.0.3000.0-7.0.4002.0" newVersion="7.0.4003.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

刪除新的程序集和程序集 - 根據舊的基本程序集進行編譯,並且所有程序都應該可以正常工作 - 除非較新的基本程序集包含您依賴的api中的重大更改。

0

一種方法是爲每個「相同」庫創建2個項目,但使用同一組源文件。您可以通過創建第二個項目(例如Shared.WebControls6和Shared.WebControls7)以及在將現有文件添加到新項目時使用「添加爲鏈接」選項來執行此操作 - 現有項目已包含所有文件。請注意,這有兩個項目需要對項目文件進行任何更改(例如添加新類)的缺點。

另一種選擇可能是讓項目文件本身的花哨。也許像(注:未測試):

<ItemGroup> 
    <Reference Include="Authentication.7" Condition=" '$(foo)' == '7' " /> 
    <Reference Include="Authentication.6" Condition=" '$(foo)' == '6' " /> 
</ItemGroup> 
<!-- or --> 
<ItemGroup> 
    <Choose> 
    <When Condition="'$(foo)'=='7'"> 
     <Reference Include="Authentication.7" Condition=" '$(foo)' == '7' " /> 
    </When> 
    <Otherwise> 
     <Reference Include="Authentication.6" Condition=" '$(foo)' == '6' " /> 
    </Otherwise> 
    </Choose> 
</ItemGroup> 

要建立,你必須foo的值設置爲你希望建立對(例如msbuild myproj.csproj /p:foo=7)的版本。

+0

最大的缺點是,對於我在「主」項目中添加的每個文件,我需要記住在子項目中「添加爲鏈接...」。這應該更容易... – balexandre