设置环境变量以在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?是另一种解决方案,尽管它只能找到执行二进制文件所在目录下的子目录。
AppDomain.CurrentDomain.SetupInformation.PrivateBinPathProbe
或
AppDomain.CurrentDomain.AssemblyResolve += (sndr,resolveEventArgs) =>
{
if(resolveEventArgs.Name==something){
return Assembly.LoadFile(assemblyPath);
}
return null;
};
您可以使用Environment
类。
特别是GetEnvironmentVariable
和SetEnvironmentVariable
方法(在本例中使用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);
}