2010-03-11 3 views
6

Ich habe eine ASP.NET-Website und möchte den Ordner/bin/[Configuration] für die Verwendung eines externen suchen Werkzeug (eine EXE-Datei). Wenn ich Reflektion verwenden, um Baugruppen Standort zu erhalten Aufruf gibt es etwas ähnliches wie:Kann ich reflection verwenden, um den Ordner bin/[Configuration] in ASP.NET anstelle des asp temporären Ordners zu finden

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

Da jede dll sein eigenes Verzeichnis unter den temporären ASP.NET-Dateien hat dies für mich nicht.

Wie bekomme ich den Speicherort des kompilierten binären Ordners, wo die DLLs und die EXE ist (d. H. Bin /) anstelle von ASP.net temporäre Cache?

Hinweise

  • Dieser Code in einer tragenden Bibliothek, die von ASP.NET-Websites oder anderen Konsole/Windows-Anwendungen aufgerufen werden können.
+0

Wenn es von "anderen Konsolen/Windows-Apps" aufgerufen wird, woher weiß es dann über die Website? –

+0

> "Wie kann ich den Speicherort des binären, nicht asp.net temporären Cache abrufen?" Welche binäre? Ihre eigene oder die aufrufende Binärdatei? –

+0

Es tut nicht, ich will es auch nicht. Es ist eine C# -Bibliothek, die eine .exe-Datei von Drittanbietern enthält, die zusammen mit den Bibliotheken .dll in das endgültige Verzeichnis bin/[Config] kopiert wird. Die Bibliothek muss die .exe ausführen und da alle verschiedenen Builds an verschiedenen Orten landen, muss sie entweder selbst konfiguriert oder konfiguriert werden. Im Moment konfiguriere ich es (in der global.asax, weil ich das bin Dir für die Website finden muss). Ich hatte gehofft, dass es nur in der Lage ist, zu erkennen, wo der Behälter ist. – vfilby

Antwort

13

Sie könnten versuchen (von How to: Get the Application Directory genommen):

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

Ich habe einen schnellen Test mit bis:

  • A webanwendungsprojekt läuft unter dem VS dev-Server (kompilierte Website,/bin Verzeichnis usw.).
  • Ein Klassenbibliotheksprojekt, auf das von WA verwiesen wird.
  • In der Web-Anwendung ich eine Seite erstellt, die die folgende Methode aus dem Bibliotheksprojekt genannt:

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

Dieses auf der Seite in der folgenden Ausgabe ergab:

Datei: \ C: \ Benutzer \ Benutzername \ Dokumente \ Visual Studio 2008 \ Websites \ Lösung \ Projekt \ bin

Welches ist, was ich erwarten würde.

+0

Das sieht vielversprechend aus Ich werde es später ausprobieren! – vfilby

+2

Ich habe das mehrmals benutzt, seit du geantwortet hast, ich wünschte, ich könnte es für jede Verwendung abstimmen. – vfilby

+0

Heh, keine probs - dieser Kommentar ist genug :) –

4

Server.MapPath ("~ \ bin")

+0

Dies ist in einer unterstützenden Bibliothek, die von ASP.NET aufgerufen werden kann oder aus regulären C# Windows-Anwendungen aufgerufen werden kann. – vfilby

+0

In diesem Fall muss es entweder Teil der Konfiguration für die unterstützende Bibliothek sein oder Sie müssen den gewünschten Pfad in einer seiner Methoden übergeben. – Bryan

0

Gibt es Gründe, nicht nur tun, um

Server.MapPath("~/bin"); 

?

+0

Dies ist in einer unterstützenden Bibliothek, die von ASP.NET aufgerufen werden kann oder aus regulären C# Windows-Apps aufgerufen werden kann. – vfilby

+0

Was versuchst du mit den Assembly (s) zu tun, wenn du es gefunden hast (/ sie)? Müssen Sie überhaupt den physischen Speicherort der Datei wissen? – Paul

+0

Es ist eine exe, die ich ausführen muss, die in bin/[Configuration] befindet. Momentan konfiguriere ich den Standort manuell. Ich hatte gehofft, es ein bisschen generischer zu machen. – vfilby

Verwandte Themen