J'ai un site Web ASP.NET et je souhaite trouver le dossier /bin/[Configuration] pour utiliser un outil externe (un fichier exe). Lorsque j'utilise la réflexion pour obtenir l'emplacement des assemblys appelants, cela renvoie quelque chose de similaire à :

C:\Windows\Microsoft.NET\Framework\\...\Temporary ASP.NET Files\a1388a5e\\...\my.dll

Étant donné que chaque dll a son propre répertoire sous les fichiers temporaires ASP.NET, cela échoue pour moi.

Comment puis-je obtenir l'emplacement du dossier binaire compilé où se trouvent les dll et le .exe (c'est-à-dire bin/) au lieu du cache temporaire d'asp.net ?

Notes

  • Ce code se trouve dans une bibliothèque de prise en charge qui peut être appelée à partir de sites Web ASP.NET ou d'autres applications console/Windows.
7
vfilby 11 mars 2010 à 21:58
Lorsqu'il est appelé depuis "d'autres applications console/Windows", comment connaît-il le site Web ?
 – 
Zhaph - Ben Duguid
11 mars 2010 à 23:20
> "Comment puis-je obtenir l'emplacement du binaire, pas le cache temporaire d'asp.net ?" Quel binaire ? Le vôtre, ou le binaire appelant ?
 – 
Mark Brackett
12 mars 2010 à 00:18
Ce n'est pas le cas, et je ne le veux pas non plus. C'est une bibliothèque c# qui a un .exe tiers qui est copié dans le répertoire final bin/[Config] avec les bibliothèques .dll. La bibliothèque doit exécuter le .exe et comme toutes les différentes versions se retrouvent dans des emplacements différents, elle doit être configurée ou se configurer elle-même. En ce moment, je le configure (dans le fichier global.asax car je dois trouver le répertoire bin pour le site Web). J'espérais qu'il soit juste capable de détecter où se trouve la poubelle.
 – 
vfilby
12 mars 2010 à 00:18

3 réponses

Meilleure réponse

Vous pouvez essayer (extrait de Comment : obtenir le répertoire des applications) :

Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);

J'ai mis en place un test rapide avec :

  • Un projet d'application Web s'exécutant sous le serveur de développement VS (site compilé, répertoire /bin, etc.).
  • Un projet de bibliothèque de classes, référencé par le WA.
  • Dans l'application Web, j'ai créé une page qui a appelé la méthode suivante à partir du projet de bibliothèque :

    using System.IO;
    using System.Reflection;
    
    namespace TestHelpers {
      public class ClassHelpers {
        public static string PathToBin() {
          return Path.GetDirectoryName(
                   Assembly.GetExecutingAssembly().GetName().CodeBase);
        }
      }
    }
    

Cela a donné le résultat suivant sur la page :

file:\C:\Users\ Nom d'utilisateur \Documents\Visual Studio 2008\Websites\ Solution \ Projet \bin

C'est ce à quoi je m'attendrais.

13
Zhaph - Ben Duguid 12 mars 2010 à 19:56
Cela semble prometteur, je vais l'essayer plus tard dans la journée!
 – 
vfilby
12 mars 2010 à 20:40
2
Je l'ai utilisé plusieurs fois depuis que vous avez répondu, j'aimerais pouvoir le voter pour chaque utilisation.
 – 
vfilby
19 avril 2010 à 19:17
Hé, pas de problèmes - ce commentaire suffit :)
 – 
Zhaph - Ben Duguid
19 avril 2010 à 19:35

Server.MapPath("~\bin")

4
Bryan 11 mars 2010 à 22:05
Il s'agit d'une bibliothèque de prise en charge qui peut être appelée à partir d'ASP.NET ou à partir d'applications Windows c# régulières.
 – 
vfilby
11 mars 2010 à 22:13
Dans ce cas, il doit soit faire partie de la configuration de la bibliothèque de prise en charge, soit transmettre le chemin souhaité dans l'une de ses méthodes.
 – 
Bryan
12 mars 2010 à 00:09

N'importe quelle raison de ne pas simplement faire

Server.MapPath("~/bin");

?

0
Paul 11 mars 2010 à 22:05
Il s'agit d'une bibliothèque de prise en charge qui peut être appelée à partir d'ASP.NET ou à partir d'applications Windows c# régulières.
 – 
vfilby
11 mars 2010 à 22:15
Qu'essayez-vous de faire avec le(s) assemblage(s) une fois que vous les avez trouvé(s) ? Avez-vous même besoin de connaître l'emplacement physique du fichier ?
 – 
Paul
11 mars 2010 à 23:40
C'est un exe que j'ai besoin d'exécuter et qui se trouve dans bin/[Configuration]. En ce moment, je configure manuellement l'emplacement. J'espérais le rendre un peu plus générique.
 – 
vfilby
11 mars 2010 à 23:55