2 Stimmen

Umgebungsvariable einrichten, um die DLLs zur Laufzeit mit C# zu finden

Ich verwende ANTLR zum Parsen eines Dokuments und benötige einige ANTLR dlls. Für die Kompilierung kann ich /lib: verwenden, um den Ort zu finden, an dem sich die ANTLR dll-Bibliotheken befinden, aber wenn ich die ausführende Binärdatei ausführe, erhalte ich eine Fehlermeldung.

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'Antlr3.Runtime, Version=3.1.3.421
54, Culture=neutral, PublicKeyToken=3a9cab8f8d22bfb7' or one of its dependencies. The system cannot find the file specif
ied.
   at Antlr.Examples.LLStar.LLStarApp.Main(String[] args)

Der Fehler verschwindet, wenn ich die ANTLR dll in das gleiche Verzeichnis kopiere, in dem sich die Ausführungsbinärdatei befindet.

Ich habe das Verzeichnis, in dem sich die Dlls befinden, in den Pfad aufgenommen, aber es funktioniert immer noch nicht. Wie kann ich eine Umgebungsvariable oder etwas anderes einrichten, um die dlls zu finden? Ich verwende Windows 7.

HINZUFÜGEN

Ich denke, es gibt keine Möglichkeit, PATH oder eine Umgebungsvariable zu verwenden, um dies zu tun, ich denke, GAC ist eine Lösung, und Benutzerdefinierten Pfad zu referenzierten DLLs festlegen? ist die andere Lösung, auch wenn sie nur die Unterverzeichnisse unterhalb des Verzeichnisses findet, in dem sich die ausführende Binärdatei befindet.

3voto

L.B Punkte 110059

AppDomain.CurrentDomain.SetupInformation.PrivateBinPathProbe

ou

AppDomain.CurrentDomain.AssemblyResolve += (sndr,resolveEventArgs) =>
{
    if(resolveEventArgs.Name==something){
        return Assembly.LoadFile(assemblyPath);
    }
    return null;
};

0voto

Oded Punkte 475566

Sie können die Environment Klasse für diesen Zweck.

Insbesondere die GetEnvironmentVariable y SetEnvironmentVariable Methoden (in diesem Fall mit der PATH Umgebungsvariable.

Utilice GetEnvironmentVariable um die aktuellen Einstellungen abzurufen, fügen Sie dann Ihren Pfad zu der zurückgegebenen Zeichenkette hinzu und verwenden Sie SetEnvironmentVariable um sie zu aktualisieren.


Natürlich können Sie all dies auch manuell erledigen.

0voto

DaNeSh Punkte 974
    static void AddEnvironmentPaths(IEnumerable<string> paths)
    {
        var path = new[] { Environment.GetEnvironmentVariable("PATH") ?? string.Empty };

        string newPath = string.Join(Path.PathSeparator.ToString(), path.Concat(paths).ToArray());

        Environment.SetEnvironmentVariable("PATH", newPath);
    }

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