29 Stimmen

Wie erhält man das aktuelle Verzeichnis einer Klassenbibliothek?

Ich habe mich umgesehen, aber ich habe keine Lösung für dieses Problem gefunden: Ich möchte eine Klassenbibliothek erstellen, die eine Konfigurationsdatei in einem Unterverzeichnis namens Configuration enthält. Ich möchte, dass diese Klassenbibliothek überall eingesetzt werden kann und dass sie ihre Konfigurationsdateien findet, indem sie ihren eigenen Speicherort kennt.

Frühere Versuche mit Assembly.GetExecutingAssembly().Location hat nicht funktioniert.
Es würde temporäre Orte wie die folgenden zurückgeben

C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\7c00e0a3\38789d63\assembly\dl3\9c0a23ff\18fb5feb_6ac3c901

statt der gewünschten

bin/Configuration Pfad.

Also:

  1. Kann eine Klassenbibliothek ihren eigenen Speicherort auf der Festplatte kennen?
  2. Wie würde ich gehen über witting Testskripte für diese Funktionalität, da es scheint, dass Verzeichnisse ändern, basierend auf wie Sie die app (Debuggen innerhalb VS, Bereitstellung auf IIS, etc.) ausführen

0 Stimmen

Warum nicht die Konfiguration in die app.config-Datei der Anwendung aufnehmen und ConfigurationManager in Ihren Klassenbibliotheken verwenden?

0 Stimmen

Vielleicht möchten Sie Ihre Frage (zur besseren Auffindbarkeit später) dahingehend präzisieren, dass es sich um ASP.NET handelt. Für Desktop-Anwendungen funktioniert GetExecutingAssembly() einwandfrei.

1 Stimmen

@Justin: Ich möchte, dass die Klassenbibliothek unabhängig von der aufrufenden Anwendung ist. @Stu: Beides. Ich möchte eine Klassenbibliothek erstellen, die sowohl für Console Apps als auch für Web Apps verwendet werden kann. Die Klassenbibliothek sollte sich nicht darum kümmern, wer sie aufruft.

46voto

Reed Copsey Punkte 536986

Das sollte funktionieren.

string assemblyFile = (
    new System.Uri(Assembly.GetExecutingAssembly().CodeBase)
).AbsolutePath;

0 Stimmen

Würde: System.Reflection.Assembly.GetExecutingAssembly ().Location nicht die gleichen Informationen liefern?

1 Stimmen

@dba nicht, wenn es Schattenkopien gibt. Versuchen Sie es zum Beispiel in einem Unit-Test, und es wird falsch sein

3voto

Rajeev Kumar Punkte 342

Der folgende Code hat bei mir funktioniert, um den physischen Pfad des Ordners "Images" in der Klassenbibliothek zu ermitteln.

string fullFilePath = Path.Combine((new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath.Split(new string[] { "/bin" }, StringSplitOptions.None)[0]
                          , "@/Images/test.png");

Ich hoffe, es wird jemandem helfen.

0 Stimmen

Ich glaube, das hier funktioniert bei mir, also danke, @RajeevKumar

0voto

Basil Skaria Punkte 1

Alte Frage, aber eine Antwort für neue Betrachter. Greifen Sie einfach auf die Datei zu. Ich habe mehrere Methoden ausprobiert, indem ich das Verzeichnis dynamisch gesetzt habe, jedoch ohne positives Ergebnis. Aber auf der anderen Seite sehe ich, dass es automatisch auf die Dateien in seinem Verzeichnis/Unterverzeichnissen zugreift, ohne explizit irgendwelche Methoden aufzurufen, um das aktuelle Verzeichnis zu erhalten.

[Mein Fall] Ich musste auf eine Konfigurationsdatei zugreifen, die zusammen mit einer Klassenbibliothek gespeichert war, und ich konnte direkt auf sie zugreifen, ohne die Adresse anzugeben oder zu setzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X