设置环境变量以使用C#在运行时查找dll

时间:2011-10-13 19:49:10

标签: c# dll environment-variables

我使用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。

ADDED

我想没有办法使用PATH或环境变量来做到这一点,我认为GAC是一个解决方案,而Set Custom Path to Referenced DLL's?是另一个解决方案,即使它只能找到目录下的子目录执行二进制文件所在的位置。

3 个答案:

答案 0 :(得分:3)

AppDomain.CurrentDomain.SetupInformation.PrivateBinPathProbe

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

答案 1 :(得分:0)

您可以使用Environment类。

特别是GetEnvironmentVariableSetEnvironmentVariable方法(在这种情况下使用PATH环境变量。

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


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

答案 2 :(得分:0)

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