2009-10-27 9 views
2

Nous créons une bibliothèque partagée qui est en fait un wrapper sur les blocs d'application Microsoft (Caching, Logging, etc.). J'essaie de rendre cette bibliothèque disponible pour plusieurs applications ASP.Net.Déployer le bloc d'application Microsoft dans le dossier partagé

Cette bibliothèque est déployée dans un foler partagé.

J'ai créé un conteneur personnalisé qui sera utilisé par toutes les applications ASP.net pour utiliser n'importe quel service (journalisation, mise en cache) etc. de la bibliothèque. L'emplacement du dossier de bibliothèque est utilisé par le conteneur pour localiser la DLL de la bibliothèque.

Toute la configuration du bloc d'application se trouve dans app.config qui est chargée dymaniquement par les blocs Application. Le problème que je suis confronté est que la configuration essaye de charger le bloc d'application en supposant que les Dll de bloc d'application seront stockés dans le GAC mais pour une raison quelconque je ne peux pas placer les assemblys de bloc d'application dans GAC. Je les ai dans le même dossier que Library Dll. Pour cette raison, la bibliothèque DLL n'est pas en mesure de charger le bloc d'application. Je pense qu'une façon de résoudre ceci est de spécifier l'élément CodeBase dans la section d'exécution dans Machine.Config. Je voudrais savoir s'il y a une meilleure façon où je peux spécifier l'emplacement des DLL des blocs d'application dans le fichier de configuration.

Des pensées?

Cordialement,

+0

Quelle version d'EntLib utilisez-vous? – serialhobbyist

+0

Version 4.1 du EntLib – rauts

+0

Voir ma réponse ci-dessous. – serialhobbyist

Répondre

2

Dans .NET vous ne pouvez pas (facilement) des bibliothèques de partager sur plusieurs applications à moins qu'ils sont placés dans le GAC.

AFAIR, l'élément CodeBase est uniquement destiné à pointer vers un composant COM particulier, de sorte qu'il existe pour prendre en charge l'interopérabilité COM. Cela dit, vous pouvez exporter votre bibliothèque .NET en tant que composant COM et le référencer via COM interop, mais je ne le recommanderais pas, car il y a un surcoût en termes de performances ainsi qu'un surcoût de maintenance. Rappelez-vous dll enfer? C'est là que cette approche vous mènera.

Vous devez placer vos assemblys dans le GAC si vous devez les partager entre plusieurs applications.

Sinon, vous devrez les déployer avec chaque application.

Ce sont les seules options avec .NET.

+0

Merci pour la réponse. L'autre façon que j'ai trouvé était de se connecter à l'événement AssemblyResolve de la classe AppDomain.Current (http://www.devcity.net/Articles/254/1/article.aspx). Mais cela signifierait que toute l'application devra l'implémenter dans le form_load ou le Page_load, ce qui n'est pas une bonne option. En tout cas, merci beaucoup pour votre temps – rauts

1

Pour une raison quelconque, je ne peux pas placer les ensembles de blocs d'application dans GAC

Ent Lib 4.x est livré avec deux versions des DLL. Une version a un nom fort et peut être ajoutée au GAC; l'autre n'est pas et ne peut pas. Si vous utilisez la version 4.x, assurez-vous que vous essayez d'ajouter les fichiers de C: \ Program Files \ Microsoft Enterprise Library 4.1 - Octobre 2008 \ Bin plutôt que ceux de C: \ EntLib41Src \ bin et vous devriez va bien. Si non, pouvez-vous nous dire quel est le problème - le GAC est la voie à suivre, OMI.

+0

Merci pour la réponse. Tout mon problème est que je n'utilise pas les blocs d'application directement mais je crée un wrapper qui référencerait le bloc d'application. Je ne veux pas que les développeurs d'applications utilisent mon wrapper pour enregistrer les blocs d'application dans GAC. – rauts

+0

Voulez-vous dire que vous voulez que leurs applications utilisent votre wrapper qui utilise EntLib mais vous ne voulez pas qu'ils puissent utiliser EntLib directement? Ou vous ne voulez pas qu'ils aient à enregistrer quelque chose dans le GAC pour pouvoir utiliser votre wrapper? – serialhobbyist

+0

Je ne veux pas qu'ils enregistrent quoi que ce soit dans le GAC pour pouvoir utiliser mon wrapper. – rauts

Questions connexes