Remonté aller avec une approche qui semble fonctionner beaucoup aujourd'hui, même si je reste encore un peu de creuser à faire avant que je trouve les ramifications de cette approche ...
Le blog suivant a aidé énormément: http://ikickandibite.blogspot.com/2010/04/appdomains-and-true-isolation.html
J'ai simplement permis à l'héritage politique d'exception non gérée dans le app.config:
(qui, comme votre information, est toujours disponible même dans 4,5 .Net, que j'étais préoccupé)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<runtime>
<legacyUnhandledExceptionPolicy enabled="true"/>
</runtime>
</configuration>
... De quel point je peux utiliser l'événement AppDomain.UnhandledException pour intercepter une exception non gérée et décharger le sous-domaine ... (notez que je dis 'intercepter' ici vaguement ... Je suis toujours pas 'attraper' l'exception, juste en en notant un déchargement de l'addin dans le processus)
Collection<AddInToken> tokens = AddInStore.FindAddIns(typeof(IApplicationAddIn), pipelineStoreLocation, addInPath);
foreach (AddInToken token in tokens)
{
AppDomain domain = AppDomain.CreateDomain(token.Name);
domain.UnhandledException += (sender, args) =>
{
AppDomain _domain = (AppDomain) sender;
AppDomain.Unload(_domain);
};
Console.WriteLine("Initializing add-in '{0}'", token.Name);
IAddIn addin = token.Activate<IAddIn>(domain);
try
{
addin.Initialize(this);
}
catch (Exception ex)
{
Console.WriteLine("Problem initializing add-in '{0}': {1}", token.Name, ex.Message);
}
}
MAF! = MEF ?? ...ça sonne drôle –
lol, j'aimerais pouvoir utiliser MEF mais le manque de fonctionnalité de rechargement de module suce = ( –