2012-08-07 15 views
8

Ben IDessertPlugin uygulamak sınıfların bir dizi var. Bunlar benim uygulamada eklenti işlevsellik olarak kullanmak için bunların örneklerini yukarı dönmeye MEF kullandığınız çeşitli DLL içinde bulunurlar.nasıl MEF eklentileri olan her DLL sürüm numarasını alabilirim?

Yani ne yapmak isteyen ediyorum ben MEF kullanarak eklentileri yükledim hangi DLL sürüm numarasını görüntülemek olduğunu. Bir veya daha fazla eklenti, uygulamamda yüklediğim bir veya daha fazla DLL'de tanımlıdır.

var catalog = new AggregateCatalog(); 
catalog.Catalogs.Add(
    new DirectoryCatalog(Path.Combine(
     Path.GetDirectoryName(Assembly.GetExecutingAssembly().location), "Plugins"))); 

var container = new CompositionContainer(catalog); 

container.ComposeParts(this); 

Ve bu nerede uygulamasının çalıştığı Eklentiler alt dizinden gayet eklentileri yüklemek olacaktır:

Şu anda şöyle bir şey yapmak.

catalog.Catalogs.First().Parts.First().GetType().Assembly.FullName 

gibi bir şey sadece döner yapmak

"System.ComponentModel.Composition, Sürüm = 4.0.0.0, ..."

bilmek muktedir Ne umuyordum ben olmasıydı ve CakePlugins.dll Sürüm 1.1 ve IceCreamPlugins.dll Sürüm 1.1 var. Eklentilerin kendileri hakkında bir sürüm özelliği yoktur - DLL sürümüne güvenmek istiyorum. Umarım bu mantıklıdır.

ben onlara Assembly.GetName().Version çağrı böylece orada kullanıyorum hangi DLL bilmek çözemedim.

Fikirler?


Çözüm:

Yani, benim sorunun çözümü parçaları oluşan edildikten sonra oldukça basit oldu.

[ImportMany(typeof(IDessertPlugin)] 
private IEnumerable<IDessertPluing> dessertPlugins; 

ve konteyner parçaları kompozisyon yerini almıştır bir kere, ben şöyle benim eklentileri arasında yineleme olabilir:

My eklenti yönetim kodu bir giriş şöyle sahiptir

foreach(var plugin in dessertPlugins) 
{ 
    Console.WriteLine(Assembly.GetAssembly(plugin.GetType()).GetName().Version.ToString()); 
} 
+0

You should

My eklenti yönetim kodu bir giriş şöyle sahiptir Çözümünüzü bir yanıt olarak gönderin ve sorunuzda yayınlamaktan ziyade kabul edildi olarak işaretleyin. – tomfanning

cevap

1

Bu nedenle, sorunumun çözümü, parçalar oluşturulduktan sonra oldukça kolaydı. Yüklediğim tüm eklentileri barındıran konteynere bakmak yerine MEF nesnelerini kendileri kazmaya çalışıyordum. Cevap, bu eklentilerin nasıl yüklendiğini ve sadece ortaya çıkan nesnelere nasıl baktığını tamamen göz ardı etmekti.

[ImportMany(typeof(IDessertPlugin)] 
private IEnumerable<IDessertPluing> dessertPlugins; 

ve konteyner parçaları kompozisyon yerini almıştır bir kere, ben şöyle benim eklentileri arasında yineleme olabilir:

foreach(var plugin in dessertPlugins) 
{ 
    Console.WriteLine(Assembly.GetAssembly(plugin.GetType()).GetName().Version.ToString()); 
} 
2

Sen farklı özelliklerde AssemblyVersion, AssemblyFileVersion ve AssemblyDescription gelen montaj bilgisi alabilirsiniz.

   /// <summary> 
       /// This class provide inforamtion about product version. 
       /// </summary> 
       public class ProductVersion 
       { 
        private readonly FileVersionInfo fileVersionInfo; 

        private readonly AssemblyName assemblyName; 


        private ProductVersion(Type type) 
        { 
         // it done this way to prevent situation 
         // when site has limited permissions to work with assemblies. 
         var assembly = Assembly.GetAssembly(type); 
         fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); 
         assemblyName = new AssemblyName(assembly.FullName); 
        } 

        public string AssemblyFileVersion 
        { 
         get 
         { 
          return fileVersionInfo.FileVersion; 
         } 
        } 

        public string AssemblyVersion 
        { 
         get 
         { 
          return assemblyName.Version.ToString(); 
         } 
        } 



       } 
+0

Hey, cevabınız için teşekkürler. Sorunum, derlemeden bilgileri nasıl bulacağımı değil, MEF nesnelerine ait montaj bilgilerinin nasıl elde edileceğini bulmak değildi. Bir zamanlar konteynırdaki parçaları oluşturduktan sonra, yarattığım nesnelerim ve sonra onların üzerinden geçip ihtiyacım olan bilgiyi alabilirim. – itsmatt

İlgili konular