C# 为什么.NET应用程序不加载添加到PATH环境变量的文件夹中的程序集?
我有一个.Net应用程序,它使用了几个.Net dll,这些dll位于PATH环境变量中包含的文件夹中,但是当我启动.Net应用程序时,如果出现错误,则:C# 为什么.NET应用程序不加载添加到PATH环境变量的文件夹中的程序集?,c#,.net,dll,C#,.net,Dll,我有一个.Net应用程序,它使用了几个.Net dll,这些dll位于PATH环境变量中包含的文件夹中,但是当我启动.Net应用程序时,如果出现错误,则: 无法加载文件或程序集“FxDoc.dll,版本=1.2.10.0,区域性=中性,PublicKeyToken=1b44e1d4261664821”或其依赖项之一。系统找不到指定的文件。 我已经阅读了这些MSDN条目和 其中指出: Windows然后按以下顺序搜索DLL: 当前进程的可执行模块所在的目录 定位 当前目录 Windows系统目录。
无法加载文件或程序集“FxDoc.dll,版本=1.2.10.0,区域性=中性,PublicKeyToken=1b44e1d4261664821”或其依赖项之一。系统找不到指定的文件。
我已经阅读了这些MSDN条目和
其中指出:
Windows然后按以下顺序搜索DLL:
当前进程的可执行模块所在的目录
定位
当前目录
Windows系统目录。GetSystemDirectory函数
检索此目录的路径
Windows目录。GetWindowsDirectory函数检索
此目录的路径
PATH环境变量中列出的目录
我的问题是:
可能有几个因素在起作用,包括(相对较新的)注册表参数“SafedlSearchMode”。您可以在此处获得详细信息: 我将检查此链接并检查环境的GetAssembly()位置和CurrentDomain.BaseDirectory: 这也是一个很好的链接:
最后,可能错误的根本原因不是.dll本身,而是它所依赖的某个其他.dll。使用MS Dependency Walker查看.exe和.dll以查找程序集加载失败的疑难解答不会有什么坏处-
CLR不使用PATH搜索程序集-您的链接用于加载本机映像。请查看这一个:用于.NET程序集和普通旧DLL的规则不同。您列出的规则适用于普通的旧DLL 程序集加载异常复杂,但基本搜索顺序如下:
这有一个强名称吗?问题是否可能是由于FxDoc.DLL所依赖的不同DLL造成的?@Arun该DLL没有任何字符串名称,并且在系统中仅存在一个副本(100%确定)。显然不是:。链接建议使用网络反射器。。。但当他们开始冲锋的时候我对RedGate很反感。。。并删除了安装在硬盘上的Reflector的任何较旧的可用(免费)版本。尽管如此,我相信我给你的链接应该为你指明了正确的方向。这个工具,MS“Assembly Binding Log Viewer”,可能也会有所帮助:是否可以向-NET用于搜索程序集的位置列表(不是GAC)添加特定路径?不,不太可能。我建议您要么简单地将FxDoc.dll复制到应用程序的文件夹中,要么使用gacutil.exe将文件安装到GAC中。+1从不知道.Net dll与Win32 dll没有相同的规则。非常感谢。微软是不是故意想迷惑人们?所以现在dll不再是dll了。为什么他们没有为.net dll文件使用不同的扩展名。比如.netdll。无论如何,很高兴知道,谢谢约翰。