2010-12-15 19 views
13

sürümleri ve ne yazık ki şimdi yüklemek için hangisinin karar verebilir zamanında nedenle projemin içine en son ve bir önceki sürümünü yüklemek gerekiyor. Sadece bir tane lazım, ikisine de değil. Ben yansıma gelen yük ve kullanmak istediğim yöntemi/olaylar/arabirimler için her defasında sorgulamak olamaz yani akılda tutarak Yükleme birden ben bir üçüncü taraf montaj ile çalışıyorum aynı montaj

, ben de bileşenleri tarafından sağlanan türleri bağımlı değilim. Bu işlemin AppDomain s üzerinden ele alınmasından bahsetmiştim ama nasıl devam edeceğimi bilmiyorum.

İşlem, bileşenin bir sürümüne karşı kodlama yapmak ve daha sonra çalışma zamanında (AppDomain'u kullanarak) doğru DLL'de değiştirilmek ister misiniz? Yani bunu sadece başlangıçta halledebilir miyim?

cevap

0

bu iki sürüm uygulanmasında aynı zamanda onlar açığa operasyon sayısında sadece farklılık anlamına gelir daha aynı bileşen iki farklı sürümleri varsa? Bu durumda, bazı işlevler yalnızca iki sürümden birinde sürümleri nasıl değiştirebilirim? Eğer o zaman bir tane kaldıramıyor olabilir, çünkü iki ayrı uygulama alanlarındaki yapmak zorunda kalacak iki sürümü yüklemek istiyorsanız

Neyse, sonradan gerek yoktur. Ardından mantığınızı, How do I create an application domain and run my application in it?'da açıklandığı gibi doğru uygulama etki alanında çalıştırabilirsiniz.

Bu mesaj log4net iki farklı versiyonunu başvuru açıklamaktadır:

4

İşte aynı montaj birden çok sürümünü yüklemek için nasıl tarif burada SO üzerinde bir kaç yayın verilmiştir. @Joe B.'nin yorumunu, sorunun nasıl çözüldüğü konusunda biraz daha fazla ayrıntı için kabul edilen yanıtın altına bakın.

3rd party libraries refer to different versions of log4net.dll

Bu cevap bu bağlantıyı ifade eder:

Using different versions of the same assembly in the same folder

Bu konuya içinde, aynı bağlamda ve referansları konusu bağlantının aynı derlemenin farklı sürümleri yükleme konusunda bir uyarı var MSDN:

http://msdn.microsoft.com/en-us/library/dd153782.aspx#avoid_loading_multiple_versions

İşte AssemblyResolve kullanarak önerir o bir cevap başka bir şeydir: Reference two equal assemblies, only public keys differ

7

iplik .Config veya web.config dosyasının her zaman yeni sürümünü bindingRedirect bildirerek kullanması.

örnek

<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v1.0.3705"> 
     <dependentAssembly> 
      <assemblyIdentity name="Regcode" publicKeyToken="b03f5f7f11d50a3a" culture=""/> 
      <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

dotnet 1.0 için bu yapılandırma girişi çağıran exe içine derlenmiş ne olursa olsun versiyonu 1.0.3300.0 kullanmak her zaman asembly yükleyici söyler. Aynı yeni dotnet sürümleri

ile mümkündür