OK, j'ai donc réussi à mettre mon Private Assembly pour mes plugins de mon exécutable, comme described here: (Ceci est juste un exemple, mon cas d'utilisation est techniquement identique, mais pas pour les plug-ins en tant que tels.)L'assembly privé et les dépendances DLL transitives?
- Executable utilise manifeste d'application pour déclarer
dependentAssembly
surplugins
Assemblée plugins
sous-répertoire contientplugins.manifest
plugins.manifest
déclareassemblyIdentity
avecfiles
liste la DLL de plug-in (s) (par exemple,easyplug1.dll
etxplug2.dll
)
Ce que je ne comprends pas tout à fait, et nous avons pas encore trouvé une explication directe, est Qu'en est-DLLs que les DLL dans l'assemblée privée dépend de? Où devraient-ils être localisés, comment sont-ils trouvés?
Exemple: Le xplug2.dll
, qui est la 3ème partie elle-même a besoin de la 3ème partie dll xbase.dll
. Naturellement, xbase.dll est simplement déployé dans le répertoire plugins. Est-ce assez? L'assembly privé doit-il répertorier les DLL utilisées uniquement de manière transitoire par le module (exécutable) déclarant sa dépendance sur l'assembly plugins
?
réponse partielle à ce jour par tâtonnement:
(A) Il semble tous DLLs, aussi ceux qui ne sont utilisés d'autres DLL « plug-in » doit figurer dans l'Assemblée privée manifeste - c'est-à-dire qu'il faut essentiellement lister tous les fichiers DLL dans le répertoire d'assemblage plugins
. (A.1) Toute DLL non répertoriée ne sera pas trouvée dans le répertoire, même si elle est référencée à partir d'une DLL dans le même sous-répertoire.
(A.2) Je suppose ce dû à toutes les machines de chargement de DLL en utilisant le (uniquement) sur mesure Activation Context de l'exécutable, et si la DLL ne s'y trouve pas, il semble chercher à l'intérieur le répertoire exécutable.
(A.3) J'essayé de regarder la chaîne de dépendance avec the latest version de Dependency Walker (2.2.10011), mais il semble qu'il ne peut pas gérer ce scénario transitif à tous: les dépendances primaires sont correctement sont indiqués, mais transitive les dépendances secondaires ne sont pas résolues à partir du manifeste, mais par rapport au répertoire de base.(On peut dire qu'elle suit plain LoadLibrary
semantics pour the transient ones.)
mise en page du fichier:
...\base\app.exe
// - contains Application Manifest declaring dependency on `plugins`
// - Loads xplug2.dll
...\base\plugins\xplug2.dll
// - Loads xbase.dll (which is only used by xplug2.dll internally)
...\base\plugins\xbase.dll
...\base\plugins\plugins.manifest
// - lists xplug2.dll (for sure)
// - *seems* to need to list also xbase.dll
À la votre! Je ai pensé autant. C'est bon d'entendre ça de la part de l'expert en la matière ;-) (Je pense que j'ai appris plus de vos réponses sur ce sujet que de n'importe qui d'autre.) A part: Curieusement, le déambulateur ne peut pas du tout y faire face. Je vais devoir vivre avec ça. –
Walker de dépendance n'a malheureusement jamais été mis à jour pour comprendre les assemblées. –
plus, je ne sais pas si je suis encore un expert: P - il semble que la plupart de mes réponses sur ce sujet ont 6 ans ou plus. sensationnel. –