J'essaye de déployer un plugin à un client. Nous utilisons des attributs MEF, import, export. J'utilise l'exportation et le client l'importe Mon application utilise DevExpress XtraGrid, XtraEditors et beaucoup d'autres DLL DevExpress (voir capture d'écran), System.Data.Services. En dépit de fournir toutes ces DLL requises et beaucoup de leurs dépendances, le plugin semble toujours exiger DevExpress.ExpressApp. DevExpress.ExpressApp et toutes ses autres dépendances ne sont définitivement pas nécessaires.Pourquoi cette DLL DevExpress.ExpressApp se charge-t-elle?
Comme le client continuait de se plaindre d'une exception FileNotFound, j'ai décidé de faire un projet de test pour importer mon propre plugin. Ceci est mon code de test pour tester la théorie des clients qu'il obtient est la suivante.
System.IO.FileNotFoundException: Could not load file or assembly 'DevExpress.ExpressApp.v14.2, Version=14.2.7.0,
Our Plugin
[Export(typeof (ISomething))]
public class MyClass : ISomething
{
}
TESTER
class Program
{
[ImportMany]
public IEnumerable<ISomething> Somethings { get; set; }
static void Main(string[] args)
{
var rp = new Program();
rp.Run();
}
public void Run()
{
Compose();
}
public void Compose()
{
try
{
AppDomain.CurrentDomain.FirstChanceException += FirstChanceHandler;
AggregateCatalog aggregatecatalogue = new AggregateCatalog();
aggregatecatalogue.Catalogs.Add(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
CompositionContainer container = new CompositionContainer(aggregatecatalogue);
CompositionBatch batch = new CompositionBatch();
batch.AddPart(this);
container.Compose(batch);
}
catch (Exception ex)
{
throw ex;
}
}
static void FirstChanceHandler(object source, FirstChanceExceptionEventArgs e)
{
System.Text.StringBuilder msg = new System.Text.StringBuilder();
msg.AppendLine(e.Exception.GetType().FullName);
msg.AppendLine(e.Exception.Message);
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
msg.AppendLine(st.ToString());
msg.AppendLine();
String desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string logFilePath = String.Format("{0}\\{1}", desktopPath, "logfile.txt");
System.IO.File.AppendAllText(logFilePath, msg.ToString());
}
Effectivement, j'ai vu dans la fenêtre de sortie et a découvert qu'il chargeait en effet cette DLL et certaines dépendances liées à ExpressApp du GAC. Question: Comment puis-je savoir où et pourquoi ExpressApp est-il nécessaire? Je peux simplement simplement livrer la DLL, mais cela continue encore et encore sur une tonne de dépendances dont j'ai compris pourquoi ils seraient nécessaires.
avez-vous de la chance pour résoudre votre problème? – andrews