2009-08-04 7 views
1

Ici ce que je cherche est où devrais-je m'attendre/suggérer la DLL dynamique sera présente?Quel est l'emplacement d'un assemblage chargé dynamiquement et comment le référencer en C#?

dois-je utiliser l'emplacement CurrentDirectory + AssemblyName pour le chargement?

ou devrais-je utiliser la propriété Assembly.CodeBase d'emplacement? J'essaie d'utiliser le Assembly.LoadFile (chemin).

Fondamentalement, je veux charger cet assemblage seulement si cela est ajouté à la solution.

il est fourni aux côtés de ma demande, et non une dll norme .net

+0

pouvez-vous être plus précis? qu'est-ce que tu veux charger? quelque chose fourni à côté de votre application (comme un plugin) ou voulez-vous charger un .net dll standard? – anthony

+0

Y a-t-il une raison pour laquelle vous n'utilisez pas Assembly.Load (assemblyName) et placez votre assembly quelque part dans le chemin de sondage ou le GAC? Plus d'informations sur ce que vous essayez de faire aiderait. –

Répondre

3

La façon la plus simple de le faire est d'assurer simplement que le dll est dans votre chemin de sondage (recherche) et (comme noets Tuzo), l'utilisation Assembly.Load. Si vous voulez charger une DLL depuis en dehors de votre chemin (et pas dans le GAC), alors il devient difficile. Il ya Assembly.LoadFile/Assembly.LoadFrom, mais alors vous devez vous soucier de la load-context; Vous pouvez rapidement constater que vous avez des problèmes avec les DLL que votre code dynamique utilise.

Une autre façon de simplifier les choses est d'utiliser un AppDomain séparé; ce nouveau AppDomain peut avoir une base/bin différente - vous permettant d'introduire les bonnes DLL (et de les décharger quand vous le voulez). Vous pouvez soit utiliser CreateInstanceAndUnwrap (qui établit un crochet à distance entre deux AppDomain s, en utilisant un proxy MarshalByRefObject), ou (pour une utilisation en une seule fois), vous pouvez simplement exécuter le nouveau AppDomain avec ExecuteAssembly.

Je couvert une gamme de ces points dans GAC, Assembly Resolution , and all that Jazz

0

Je devrais utiliser la propriété CodeBase du répertoire CurrentExecuting pour obtenir l'emplacement, parce que le CurrentDirectory pourrait être modifié à tout moment en utilisant la System.Environment.CurrentDirectory = Somelocation.

+0

Hey Naresh, un peu hors sujet - pouvez-vous restaurer cette question et y répondre avec comment vous l'avez résolu? https://stackoverflow.com/questions/40135212/service-fabric-application-upgrade-fails-wought-new-deployment-works (Je supprimerai ce commentaire dès que vous le ferez). –

Questions connexes