J'ai des assemblys (DLL) incorporés en tant que ressource (dans le concepteur de ressources). Au moment de l'exécution, j'essaie de les charger. Pour ce faire, je suis abonné à un événement comme ci-dessous:C# Chargement de l'assemblage incorporé correct dans le concepteur de ressources lors de l'exécution lorsqu'il y en a plusieurs
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(Resolver);
et la méthode est la suivante:
public System.Reflection.Assembly Resolver(object sender, ResolveEventArgs args)
{
try
{
Assembly a2 = Assembly.Load(Properties.Resources.OneDLL);
return a2;
}
catch (Exception ex)
{
// do something
}
return null;
}
code ci-dessus fonctionne bien quand je n'ai qu'une DLL intégré comme une ressource dans mon application parce que je sais lequel charger par Properties.Resources.OneDLL comme dans l'exemple ci-dessus. Le problème est lorsque certaines DLL sont incorporées en tant que ressource, je veux dire, dans la méthode ci-dessus, une fois que l'événement est levé, je ne sais pas ce que DLL est pour le charger.
Dans cette méthode, comment puis-je savoir quelle DLL est et charger en conséquence?
Dans la méthode ci-dessus, je sais args.Name contient le nom de la DLL à charger mais est une chaîne suivie d'autres informations comme la version, la culture, etc ...:
"mynamespace.OneDLL, Version=2.3.0.0, Culture=neutral, PublicKeyToken=null"
méthode serait quelque chose comme ceci:
public System.Reflection.Assembly Resolver(object sender, ResolveEventArgs args)
{
try
{
Assembly a2;
if (args.Name == 'OneDLL')
{
a2 = Assembly.Load(Properties.Resources.OneDLL);
}
else if (args.Name == 'AnotherDLL')
{
a2 = Assembly.Load(Properties.Resources.AnotherDLL);
}
else if (args.Name == 'AnotherAnotherDLL')
{
a2 = Assembly.Load(Properties.Resources.AnotherAnotherDLL);
}
else
{
return null;
}
return a2;
}
catch (Exception ex)
{
// do something
}
return null;
}
Donc le problème est que vous ne voulez pas analyser cette chaîne de nom d'assembly? – Evk
@Evk Eh bien pas du tout. Premièrement, je ne sais pas si c'est la bonne façon d'analyser le nom de l'assemblage. Deuxièmement, si c'est la bonne façon de le faire, à partir des args je peux obtenir le nom de la DLL, par exemple, en faisant String.Split (",") [0] .toString() et ensuite le comparer pour voir ce qui est la DLL à charger. Le problème ici est: de Properties.Resources.OneDLL comment puis-je obtenir le nom à comparer avec String.Split (",") [0] .toString()? – user1624552
Eh bien, vous devriez savoir à l'avance quel assemblage est stocké comme "OneDLL" dans vos ressources, donc cela ne devrait pas poser de problème. – Evk