Burada çok fazla MEF sorusu inceledim ancak sorunumun ne olduğunu hayal edemiyorum. İşte neler oluyor:MEF Parçalar dağıtılmış uygulama için bulunamadı, ancak Hata Ayıklama modunda bulunamadı Hata
AdvancedInstaller ile konuşlandırdığım bir masaüstü WPF uygulamasına sahibim. Parçaları oluşturmak için .NET 4.0 ve MEF kullanıyorum. Bazı bölümler ana projede yer alır, bu yüzden app.exe dosyasının içinde bulunurlar. Diğer bölümler, ana projeye başvuran sınıf kitaplıkları içerisindedir, bu nedenle somename.dll dosyalarının içinde bulunurlar.
Sorun: Uygulamayı VS'den çalıştırırken, hem Hata Ayıklama hem de Sürüm'de her şey yolunda. Uygulamayı dağıttığım zaman, bazı dll'ler ihracat yapacak hiçbir parçanın (sıfır) olmadığını söylüyor.
- tüm DLL dağıtım mevcuttur ve katalog
- ihracat türleri ve isimleri, sonuçta her şey Visual Studio iken doğru çalıştığını dosyaları buluyor: aşağıdaki kontrol
- Parçaları dlls'den eklemeyi denediğimde, parça sayısının YALNIZCA İSTİHDAMDA sıfır olduğunu anlıyorum.
Bu konuşlandırılmış app parçaları findind değil kodudur:
var catalog = new AggregateCatalog();
string path = Environment.CurrentDirectory.ToString();
DirectoryCatalog qualitycontrol = new DirectoryCatalog(".", "QualityControl.exe"); //this is my main assembly
DirectoryCatalog qualitymix;
catalog.Catalogs.Add(qualitycontrol); //this finds the parts and always works fine
if (File.Exists(path + @"\QualityMix.dll"))
{
qualitymix = new DirectoryCatalog(".", "QualityMix.dll"); //the file exists in the deployment
catalog.Catalogs.Add(qualitymix); //the "qualitymix" catalog shows more than 20 parts if run with VS, but 0 parts in deployment
}
çalışan tek şey (ama Uygulamayı başlatmak için çok yavaş) şudur:
var catalog = new DirectoryCatalog(".", "*");
Bu, çalışma dizininde bulunan 100'den fazla dosyayı denetlemesi gereken bir sorundur ve eklenti disklerimi farklı bir dizine yerleştiremiyorum.
Neden tüm dosyalara bakan bir DirectoryCatalog bu bölümleri bulur, ancak DirectoryCatalog tek bir kısma bakarak değil mi? Yalnızca dağıtılan uygulamada olursa bu sorunu nasıl ayıklayabilirim?
--- Düzenle: Bu sorun yalnızca belirli disklerde gerçekleşiyor, dosyalar bulunur ve diğer diskler için parçalar da bulunur. Ben tüm dlls aynı İhracat/İthalat yordamını kullanıyorum, ancak bunların bir kısmı dağıtımda hiçbir parça gösterme
Önerebileceğiniz her şey yardımcı olacaktır, teşekkürler!
YENİ BİLGİ!
Derlememi bir AssemblyCatalog ile yüklemeyi denedim. Bu Visual Studio (hata ayıklama ve Yayın) çalışır ancak konuşlandırılmış zaman aşağıdaki hataları alıyorum:
1 deneyin:
if (File.Exists(path + @"\QualityMix.dll"))
{
qualitymix = new AssemblyCatalog(Assembly.LoadFile(path + @"\QualityMix.dll")); //file is loaded and parts found in VS
catalog.Catalogs.Add(qualitymix);
}
Hata: modül derleme bildirimi içermesi bekleniyordu. (HRESULT özel durum: 0x80131018).
İkinci deneyin:
if (File.Exists(path + @"\QualityMix.dll"))
{
var name = AssemblyName.GetAssemblyName(path + @"\QualityMix.dll");
qualitymix = new AssemblyCatalog(Assembly.Load(name));
catalog.Catalogs.Add(qualitymix);
}
Hata: Dosya veya derleme 'QualityMix.dll' ya da bağımlılıklarından biri yüklenemedi. Yanlış bir biçimde bir program yüklemek için girişimde bulunuldu.
Bu hatalarla ilgili sorular aradım ancak şu ana kadar hiçbir şey yardımcı olmuyor. Tüm projeler Tüm CPU'lar için üretilmiştir ve referanslar tamamdır (bu dll, tamam yüklenen diğer projelerle aynı referansları kullanır).
Düzenleme 2:
yerine Yük
if (File.Exists(path + @"\QualityMix.dll"))
{
qualitymix = new AssemblyCatalog(Assembly.LoadFrom(path + @"\QualityMix.dll"));
catalog.Catalogs.Add(qualitymix);
}
LoadFrom kullanmak @SuryaBhaskar öneriyi çalıştı Ama aynı hatayı alıyorum: 'QualityMix dosya veya derleme yüklenemedi. dll 'veya bağımlılıklarından biri. Yanlış bir biçimde bir program yüklemek için girişimde bulunuldu. Kullanım LoadFrom yerine LoadFile veya load.If ait
Environment.Current dağıtılmış uygulamada beklediğinizi mi? Her iki durumda da ne döndüğünü kontrol edin. – VMaleev
Öneriniz için @VMaleev'e teşekkürler. CurrentDirectory iyi, dll dosyasını buluyor tamam. – Hannish
Bu çözümü boşuna çalıştım: http://stackoverflow.com/questions/9119224/mef-parts-list-sometimes-empty?rq=1 – Hannish