设置环境变量以在c#运行时查找dll

本文关键字:运行时 查找 dll 环境变量 设置 | 更新日期: 2023-09-27 18:11:16

我使用ANTLR解析文档,我需要一些ANTLR dll。对于编译,我可以使用/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所在的目录,它仍然不起作用。我如何设置环境变量或其他东西来查找dll ?我用的是Windows 7。

添加

我猜没有办法使用PATH或环境变量来做到这一点,我认为GAC是一个解决方案,并设置自定义路径引用DLL's?是另一种解决方案,尽管它只能找到执行二进制文件所在目录下的子目录。

设置环境变量以在c#运行时查找dll

AppDomain.CurrentDomain.SetupInformation.PrivateBinPathProbe

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

您可以使用Environment类。

特别是GetEnvironmentVariableSetEnvironmentVariable方法(在本例中使用PATH环境变量)。

使用GetEnvironmentVariable检索当前设置,然后将您的路径添加到返回的字符串中,并使用SetEnvironmentVariable更新它。


当然,您可以手动完成所有这些。

    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);
    }