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());
}
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