2017-04-11 1 views
0

Nous avons un projet WPF, avec prisme. Nous chargeons dynamiquement des modules qui sont placés dans un sous-dossier (PrismModules). L'application fonctionne correctement, mais si nous essayons de la déployer avec ClickOnce, elle ignore la structure du chemin de sortie et place tout dans le dossier racine au lieu du sous-dossier "PrismModules". Ensuite, l'application ne charge pas ces modules.Comment spécifier un sous-dossier comme destination pour la DLL d'un projet dans clickonce?

Est-ce une limitation du déploiement de ClickOnce?

EDIT

Pour donner un peu plus d'informations, voici comment est structuré la solution:

Solution 
- WpfClient 
- PrismModules 
    - Module A 
    - Module B 
    - Module C 

Ils sont tous construits dans le même répertoire racine, le module A/B/C sont juste dans le sous-dossier PrismModules.

WpfClient ne référence aucun des modules, il analyse le dossier PrismModules lors de l'exécution et charge tous les Dll contenant une implémentation de IModule.

Ce que j'ai remarqué:

Certains DLL qui sont référencés sont mis à la racine (et non dans le dossier PrismModules), et ceux qui ne sont dynamiquement chargés, ne sont même pas présents (nous ne pouvons pas mettre quoi que ce soit pour les dans le menu ClickOnce.

Répondre

0

dans votre projet principal (qui est déployé par ClickOnce) créer un sous-PrismModules et y ajouter DLLs de vos modules sous forme de liens. Set « BuildAction » au contenu et « Copier vers le répertoire de sortie "à" Toujours copier "

Crea Dans un sous-dossier PrismModules sous WpfClient, ajoutez des liens. Prenez les dll à partir de leur emplacement de sortie (quel que soit l'emplacement de sortie de ModuleA, ...)

Effectuez une vérification supplémentaire: sous Deploy/Application Files, ces DLL ajoutées doivent être marquées comme "Inclus" et non comme "Fichiers de données". ". Habituellement, VS le fait bien cependant.

Définissez correctement l'ordre de génération sur votre solution: WpfClient doit dépendre de votre module X pour que vous ne puissiez pas déployer une nouvelle version de l'application avec les anciennes DLL.

étape par étape:

Construire tous les projets (dans la version).

Debout sur WpfClient, cliquez-droit sur "Ajouter un nouveau dossier", nommez-le PrismModules.

Sur les PrismModules nouvellement créés, cliquez avec le bouton droit de la souris sur "Ajouter un élément existant". Accédez au module dll que vous avez construit, où qu'il se trouve. Au lieu de "Ajouter", appuyez sur "Ajouter en tant que lien" (notez le triangle à droite de "Ajouter").

+0

Mais ma DLL sont des projets qui sont juste construits dans ce répertoire – J4N

+0

Ne comprends pas la structure de votre projet. Peux-tu expliquer? – dvorn

+0

Ce que je ne comprends pas: Si je mets à jour ma DLL, cela signifie que je dois les copier à nouveau? Cela fonctionnera-t-il dans le débogage? – J4N