Assemblée A déclare un attribut d'assemblage personnalisé qui est appliqué dans l'assemblage B.Être attribut personnalisé des données de fichier d'assemblage et déverrouiller afterwise
class MyAssemblyAttribute : Attribute { /* ... */ }
Je dois obtenir que les données d'attributs de l'Assemblée B de méthode Assemblée A sans maintien de l'ensemble B chargé.
Pseudo code dans l'assemblage A:
var domain = AppDomain.Create();
MyAssemblyAttribute attr = null;
string path = "B.dll";
domain.DoCallback(() => {
attr = Assembly.Load(path)
.GetCustomAttributes()
.OfType<MyAssemblyAttribute>()
.First();
});
AppDomain.Unload(domain);
File.Delete(path);
File.WriteAllBytes(path, ...);
return expectedAttr.Equals(attr);
Comment puis-je faire?
Je peux recompiler les deux assemblages. Je ne peux pas utiliser des choses tierces comme Mono.Cecil ou IKVM.
Avez-vous essayé 'AppDomainSetup.ShadowCopyFiles = "true"'? –
@RubensFarias n'a pas aidé, mais je peux simplement supprimer l'assembly avant de le charger à l'état brut dans AppDomain – Vlad
Vous ne pouvez pas décharger un assembly, vous devrez décharger l'intégralité de 'AppDomain' comme je l'ai fait ici il y a longtemps: www.codeproject.com/Articles/24349/Generic-WCF-Host –