10
votes

Comment référez-vous des assemblages en dehors du dossier bin dans une application ASP.NET?

J'ai un service Web XML de travail écrit dans ASP.NET. Maintenant, je dois référencer certaines assemblées situées dans un dossier spécifique. c: \ nomycode
Je ne veut pas envie de copier / dupliquer des zillions de DLL dans ce dossier dans mon dossier BIN.

J'ai essayé de garder le copylocal = false pour les assemblages référés dans le service Web. Cela s'est retrouvé dans une exception FilenotFoundfound pour l'Assemblée. Lorsque je passe à copylocal = true , les DLL référencées sont copiées sur le dossier bin .. et fonctionne.

Donc, ma question ici est: Comment référencez-vous des assemblages qui ne se trouvent pas dans mon dossier BIN ou un sous-dossier en dessous? Dois-je modifier certains fichiers de stratégie de sécurité quelque part? Je pense que je ne suis pas la première personne à vouloir faire quelque chose comme ça. Donc, je suppose que quelqu'un a déjà résolu ce problème.

(j'ai essayé d'imiter un utilisateur administrateur dans le panneau de configuration IIS ASP.NET, mais cela n'a pas fonctionné non plus.)

Mise à jour: ne peut pas l'installer dans le GAC soit . Pour donner une analogie, ce service Web donne une vue simplifiée sur une application tierce par exemple. Starteam. Je ne peux pas (je ne devrais pas avoir à ... ne veut pas ..) Copiez tous les fichiers binaires dans ce dossier dans le dossier BIN ou installez-le dans le GAC


1 commentaires

J'ai le même problème et je ne trouve pas de solution! Avez-vous réussi à contourner cela? J'utilise .NET 3.5. Cela ressemble à un bug similaire à support.microsoft.com/kb/812832 .


5 Réponses :


0
votes

Vous pouvez toujours mettre vos assemblages référencés dans le GAC, l'emplacement n'aurait pas d'importance. Vous pouvez installer le composant en le faisant glisser dans le GAC (C: \ Windows \ Assembly) ou en exécutant gacutil.exe.

Cet article peut aider. Il décrit le " meilleures pratiques pour le chargement de montage ."

Au début, je pensais que vous pouviez utiliser le dans le mode d'exécution / montage de l'assemblage dans le Web.config, mais le sondage ne vous permettra que de spécifier sous-répertoires sous la racine.


0 commentaires

-1
votes

Vous pouvez mettre dans le GAC et y accéder à partir de là.


1 commentaires

Bonne réponse? Ou mieux l'a supprimé?



0
votes

Je pense que vous pouvez également faire référence à des chemins d'assemblage spécifiques dans le code.

AppDomain.CurrentDomain.AppendPrivatePath("C:\\NotMyCode");


2 commentaires

APPENDPRIVATEPATH est obsolète, selon MSDN: MSDN.MicRosoft.com/ EN-US / Bibliothèque / ...


Cela devait être dans 3.5 .. je suis encore lourd 2.0 Malheureusement. Privébinpath alors .... même ...



14
votes

Selon le Documentation MSDN ,

Les assemblages référencés en dehors du répertoire racine de l'application doivent avoir des noms forts et doivent être installés dans le cache de montage global ou spécifié à l'aide de l'élément .

Alors, cela pourrait sembler que vous n'avez pas de chance. Voici ce que j'essayais:

  1. Créez un NTFS Junction Point sous votre répertoire de base d'applications qui pointe vers le répertoire contenant votre Code partagé. C'est l'étape clé. Par exemple, dans votre répertoire de base d'applications, exécutez linkd SharedCode C: \ NotMycode . Cela rend \ SharedCode est effectivement un alias pour c: \ nodmycode .
  2. sellez asp.net à sonder pour les assemblages dans ce chemin, à l'aide d'un < Code> élément, référencer le point de jonction SharedCode . Comme cela est sous votre base de candidature, cela devrait fonctionner. Alternativement, utilisez AppDomagneSetup.privatebinpath pour définir le chemin sondé pour les assemblages.

    Je suis assez curieux de voir si cela fonctionne: -)


3 commentaires

+1 pour snowiness .. ne savait pas à propos de Linadd. Il a réussi à tromper l'explorateur Windows mais pas ASP.NET. ASP.NET copie les fichiers binaires à un emplacement temporaire de l'endroit où il est exécuté. Ce qui est étrange, c'est que l'emplacement Temp affiche ces fichiers - Toutefois, FusionLogVW ne montre pas d'entrée pour une résolution de montage échouée. Mais le serveur répond avec un Filenotfound comme d'habitude ...


Nous pouvons désactiver l'encadrement de l'ombre au répertoire temporaire. Mais je n'aime pas la solution de jonction, c'est comme un piratage ... \


J'ai testé le sondage qui ne peut pas me faire wokks avec Web Developer Server - Server Jest renvoie une erreur interne ... Assembly Resolution Ne vous aide pas au serveur échoue pendant que STARUP



4
votes

Vous pouvez toujours utiliser le: AppDomain.CurrentDomaine.assemblyResolve Event et appelez xxx

voir lien Pour plus d'informations.


0 commentaires