2010-04-01 6 views
0

Nous avons une application .NET pour Windows qui est installée localement par Microsoft Installer. Maintenant, nous avons besoin d'utiliser des assemblages supplémentaires qui sont situés en ligne sur nos serveurs Web. Nous aimerions faire référence à un uri distant tel que https://www.ourserver.com/OurProductName/ExternalLib.dll et révéler des fonctionnalités supplémentaires, décrites en gros par une interface commune connue ("AddIn/Plugin"). Ce sont pas Plugins 3rd Party, nous voulons simplement être en mesure d'échanger des parties de l'application souvent, sans qu'il soit nécessaire d'avoir des mises à jour logicielles fréquentes.Référence à un assemblage situé à distance (web uri) à partir d'une application installée localement?

Notre première idée était d'ajouter une sorte de « refence à distance » dans Visual Studio en réglant le chemin du uri de montage à distance. Mais Visual Studio a téléchargé l'assembly immédiatement dans un répertoire temporaire, en y ajoutant une référence.

Notre deuxième tentative puis, utilise simplement une WebRequest (ou WebClient) pour récupérer un flux binaire de l'Assemblée, le charger « de l'image » à l'aide Assembly.Load(...). Cela fonctionne en fait, mais pas très élégant et nécessite une programmation plus d'une vérification, etc.

Nous espérions clickonce fournirait des techniques utiles mais apparemment il est adapté aux applications autonomes uniquement. (Corriger moi?)

Existe-t-il un moyen (.net natif ou par framework/API) de référencer des assemblages situés à distance?

Merci à l'avance et ont Joyeuses Pâques!

Répondre

0

Upvoting SLaks (ne pas accepter car il ne m'a pas plus loin) et "fermeture" la question car il semble qu'il n'y a pas de meilleure façon (pour le moment), puis le faire manuellement.

1

Vous pouvez ajouter la référence dans Visual Studio, puis appelez Assembly.Load pour le charger à partir de l'URL dans votre code.

Tant que vous définissez Copy Local et Specific Version sur false sur la référence, il ne sera pas lié à cette version particulière.

+0

Salut, en fait, je ne pouvais utiliser Assembly.Load (...) pour charger une Assemblée de l'URL que vous décrivez - en passant l'URL comme paramètre d'emplacement ne fonctionne pas, vous devrez d'abord télécharger , puis charger le tableau des octets, valider (des erreurs peuvent avoir eu lieu) etc. tous manuellement, donc, je pense que ce n'est pas une solution très "élégante". Définir les options de référence comme vous l'avez décrit aiderait simplement à avoir des classes connues mais ce n'est pas le cas lors de l'utilisation d'interfaces de classe, malheureusement cela n'aide pas à référencer l'Assembly depuis le web. Merci pour votre soutien! – thmshd

+0

@Moonground: Vous devez ajouter une référence dans VS, puis appeler 'Assembly.Load' à partir d'un tableau d'octets en utilisant' WebClient'. Vous aurez besoin de faire cela avant d'appeler toutes les méthodes qui utilisent les types dans l'assmeable. (Le JITter échouera si l'assemblage n'a pas été chargé) – SLaks

+0

Oui. J'espère que vous comprenez que cela ne me rend toujours pas heureux puisque tout ce que j'ai écrit dans mon commentaire précédent s'applique toujours. – thmshd

Questions connexes