2016-05-25 17 views
5

MEF üzerinden eklentileri yükleyen bir WCF eklenti hizmetim var ve bunları çalıştırıyor.Farklı sürümleri olan eklentiler ile eklentileri çalıştırmak için önerilen yol nedir?

Her eklenti, belirli bir arabirimi uygulayan çoklu dll'leri olan bir dizindir.

Tüm eklentileri MEF (DirectoryCatalog) kullanarak aynı AppDomain'de yüklerim ve bunları genel bir şekilde (yansıma kullanarak) çalıştırırım. 1.0.0.2 yılında

Plugin1 
    ----> Entities 1.0.0.1 

Plugin2 
    ----> Entities 1.0.0.2 

ben ekledim bazı yeni kişiler:

Şimdi dll bağımlılıkları ile iki eklentileri var varsayalım sağlar.

Eklentiyi çalıştırdığımda, yeni varlıkların dll'de bulunmadığı konusunda sporadik bir hata alıyorum.

Aynı AppDomain'de kodu çalıştırdığımdan ve yüklerimin tüm eklentilerime sunulacağı ilk Entities.dll'u çalıştırdığımdan hata oluşuyor sanırım.

Peki, her bir eklentiyi, olmadan yeni bir uygulama etki alanı oluşturarak, yalıtımıyla nasıl çalıştırabilirim?

Tüm eklenti bağımlılıklarını bir şekilde yüklemek için MEF anlatabileceğim bir yol var mı?

Web'de çözümler çift hakkında okudum:

  1. her eklenti için yeni bir uygulama etki alanı oluşturma - Oraya gitmek istemiyoruz.

  2. <dependentAssembly>'u kullanın - Bu, ilk denediğimde çalışmadı ve eklenti sunucumun her montaj bağımlılığı sürüm değişikliği için güncellenmesini istemiyorum. Ayrıca, farklı montaj sürümleri ile eklentileri çalıştırabilmek istiyorum.

  3. Montajları bir snk ile imzalayın - Bunu henüz denemedim ve bu çözümün işe yaramayacağından emin değilim. Çerçeve farklı bir meclis yüklemesi gerektiğini nereden biliyor? Bu, farklı versiyonlara sahip meclislerden nasıl farklıdır? Bu işi yapmak için hizmetimi bir şekilde yapılandırmam gerekecek mi?

Benim için daha iyi bir fikri olan var mı? İzole eklentileri çalıştırmak için önerilen yol nedir?

cevap

3

Montajlarınızı imzalamanız gerekiyor Ve montaj sürümünün her birinde farklı olduğundan emin olun. Aşağıdaki yanıtı bakın: C# Load different versions of assembly to the same project

CLR, güçlü adlandırılmış derleme sürümlerini aynı AppDomain'e yüklemeyi destekliyor. Bu sadece montajlarınız güçlü bir şekilde adlandırılmış ve her birinin diğerinden farklı bir sürümü varsa işe yarar.

İlgili konular