我使用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是一个解决方案,而Set Custom Path to Referenced DLL's?是另一个解决方案,即使它只能找到目录下的子目录执行二进制文件所在的位置。
答案 0 :(得分:3)
AppDomain.CurrentDomain.SetupInformation.PrivateBinPathProbe
或
AppDomain.CurrentDomain.AssemblyResolve += (sndr,resolveEventArgs) =>
{
if(resolveEventArgs.Name==something){
return Assembly.LoadFile(assemblyPath);
}
return null;
};
答案 1 :(得分:0)
您可以使用Environment
类。
特别是GetEnvironmentVariable
和SetEnvironmentVariable
方法(在这种情况下使用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);
}