Настройте переменную среды для поиска библиотек во время выполнения с C # - PullRequest
2 голосов
/ 13 октября 2011

Я использую ANTLR для разбора документа, и мне нужны некоторые библиотеки ANTLR.Для компиляции я могу использовать / lib: для расположения, где расположены библиотеки ANTLR dll, но когда я запускаю исполняемый файл, я получаю сообщение об ошибке.

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)

Ошибка исчезает, когда я копирую библиотеку ANTLR в тот же каталог, где находится исполняемый файл.

Я добавил каталог, в котором в пути находятся dll, он все еще не работает.Как я могу установить переменную окружения или что-то, чтобы найти DLL?Я использую Windows 7.

ДОБАВЛЕНО

Я полагаю, что для этого нет способа использовать переменную PATH или переменную среды, я думаю, что GAC является одним из решений, и Установите для пользовательского пути ссылкуDLL? - это другое решение, хотя он может найти только подкаталоги под каталогом, в котором находится исполняемый двоичный файл.

Ответы [ 3 ]

3 голосов
/ 13 октября 2011

AppDomain.CurrentDomain.SetupInformation.PrivateBinPathProbe

или

AppDomain.CurrentDomain.AssemblyResolve += (sndr,resolveEventArgs) =>
{
    if(resolveEventArgs.Name==something){
        return Assembly.LoadFile(assemblyPath);
    }
    return null;
};
0 голосов
/ 09 декабря 2014
    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);
    }
0 голосов
/ 13 октября 2011

Для этого вы можете использовать класс Environment.

В частности, методы GetEnvironmentVariable и SetEnvironmentVariable (в данном случае с переменной окружения PATH.

Используйте GetEnvironmentVariable, чтобы получить текущие настройки, затем добавьте свой путь к возвращаемой строке и используйте SetEnvironmentVariable, чтобы обновить ее.


Конечно, вы можете сделать все это вручную.

...