I - Pré-requis :
Votre projet principal VBNET est obligatoirement paramétré comme suit pour suivre ce tuto :II - Le projet :
Mon projet principal se nomme "ImaboxUploader".Les 2 autres projets attenants sont des librairies de classes ou fichiers ".dll et se nomment :
- ImaboxUploader.Components (fichier .dll : ImaboxUploader.Components.dll)
- ImaboxUploader.Core (fichier .dll : ImaboxUploader.Core.dll)
III - Quand je génère mon projet principal :
Lorsque je génère mon projet principal, les autres projets attenants sont aussi générés ce qui créé 3 fichiers dans mon répertoire ...\Bin\Release\ :(ces 3 fichiers étant nécessaires au bon fonctionnement de mon application lorsqu'elle sera délivrée) :
Cependant je ne veux pas livrer mon projet final avec 2 autres fichiers à côté donc il va me falloir fusionner les assemblys dépendantes (2 fichiers .dll) à mon exécutable principal (1 fichier .exe) afin de distribuer qu'un unique fichier exécutable (imaboxUploader.exe) !
IV - Ajouter les assemblys dépendantes dans les ressources :
- Tout d'abord il faut que votre projet soit fonctionnel en l'état !- Dans mon exemple les 2 fichiers dll sont bien ajoutées en tant que références :
- Nous allons maintenant ajouter ces 2 fichiers dll dans les ressources de notre projet en vue d'obtenir ceci dans les propriétés de mon projet principal :
...et grâce à l'ajout dans les ressources on obtient donc cela dans l'explorateur de solutions :
IMPORTANT : n'oubliez pas de générer l'ensemble de votre projet afin que les fichiers dlls soient correctement intégrées dans les ressources !
V - Ajouter le code pour charger les assemblys dépendantes en mémoire au démarrage de l'application :
- Dans les propriétés du projet on clique sur le bouton suivant :....on obtient ceci :
Namespace My ' Les événements suivants sont disponibles pour MyApplication*: ' ' Startup*: déclenché au démarrage de l'application avant la création du formulaire de démarrage. ' Shutdown*: déclenché après la fermeture de tous les formulaires de l'application. Cet événement n'est pas déclenché si l'application se termine de façon anormale. ' UnhandledException*: déclenché si l'application rencontre une exception non gérée. ' StartupNextInstance*: déclenché lors du lancement d'une application à instance unique et si cette application est déjà active. ' NetworkAvailabilityChanged*: déclenché lorsque la connexion réseau est connectée ou déconnectée. Friend Class MyApplication End Class End Namespace
- Dans mon cas avec mes 2 dll je remplace le code existant par ceci :
Namespace My Friend Class MyApplication Private WithEvents DLLDomain As AppDomain = AppDomain.CurrentDomain Private Function DLL_AssemblyResolve(ByVal sender As Object, ByVal args As System.ResolveEventArgs) As System.Reflection.Assembly Handles DLLDomain.AssemblyResolve If args.Name.Contains("ImaboxUploader.Components") Then Return System.Reflection.Assembly.Load(My.Resources.ImaboxUploader_Components) ElseIf args.Name.Contains("ImaboxUploader.Core") Then Return System.Reflection.Assembly.Load(My.Resources.ImaboxUploader_Core) Else Return Nothing End If End Function End Class End Namespace
IMPORTANT :
- N'oubliez pas de générer de nouveau votre projet !
- Si vous voulez tester que cela fonctionne alors assurez-vous de déporter votre fichier executable à l'extérieur de votre répertoire de génération de projet et que vos fichiers dll ne soient pas à côté car il sont maintenant censés être intégrés dans les ressources !
Source d'inspiration du tuto : Source d'inspiration
- N'oubliez pas de générer de nouveau votre projet !
- Si vous voulez tester que cela fonctionne alors assurez-vous de déporter votre fichier executable à l'extérieur de votre répertoire de génération de projet et que vos fichiers dll ne soient pas à côté car il sont maintenant censés être intégrés dans les ressources !
Si vous avez des questions ???
Source d'inspiration du tuto : Source d'inspiration
Aucun commentaire:
Enregistrer un commentaire