为什么我的.net应用程序不加载位于添加到PATH环境变量的文件夹中的程序集
本文关键字:PATH 环境变量 添加 文件夹 程序集 应用程序 net 我的 加载 于添加 为什么 | 更新日期: 2023-09-27 18:07:50
我有一个。net应用程序,它使用了一对。net dll的,这些dll位于包含在PATH环境变量的文件夹中,但是当我启动我的。net应用程序,如果失败的错误:
Could not load file or assembly 'FxDoc.dll, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d4261664821' or one of its dependencies. The system cannot find the file specified.
我已经读了这些MSDN条目Search Path Used by Windows to Locate a DLL
和Dynamic-Link Library Search Order
:
Windows然后按以下顺序搜索dll:
当前进程的可执行模块所在目录所在地。
当前目录。
Windows系统目录。GetSystemDirectory函数获取该目录的路径。
Windows目录。函数的作用是:检索目录目录路径。
在PATH环境变量中列出的目录。
我的问题是:
- 什么因素可能导致这个错误?
- 上述信息对。net有效吗?
. net程序集和普通dll的规则是不一样的。您列出的规则适用于普通的旧dll。
程序集的加载异常复杂,但是基本的搜索顺序是这样的:
- 全局装配缓存(GAC)
- 其他位置的长列表(包括应用程序基目录,以及取决于区域性的各种子目录等)
环境变量PATH不用于。net程序集。要了解所有令人毛骨悚然的细节,您可能需要查看官方文档:
http://msdn.microsoft.com/en-us/library/aa720133.aspx我工作过的大多数地方,人们都坚持基本原则——要么把程序集放到GAC中,要么把它放在与应用程序相同的目录中。
你可能也对这个工具(fuslogvw.exe)感兴趣,它可以帮助你找出为什么加载器找不到你的程序集:
http://msdn.microsoft.com/en-us/library/e74a18c4.aspx可能有几个因素在起作用,包括(相对较新的)注册表参数"SafeDllSearchMode"。你可以在这里获得完整的细节:
http://msdn.microsoft.com/en-us/library/ms682586%28v=vs.85%29.aspx我会检查这个链接,并检查环境的GetAssembly()之类的东西。Location和CurrentDomain。BaseDirectory:
如何获得代码所在程序集的路径?
这也是一个很好的链接:
http://blogs.msdn.com/b/aymans/archive/2006/04/04/568466.aspx最后,这是可能的,也许错误的根本原因不是你的。dll本身,但一些其他。dll依赖。用MS Dependency Walker
用于排除组件加载故障- http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57120.aspx
CLR不使用PATH来搜索程序集——你的链接是用来加载本地图像的。看看这个:http://msdn.microsoft.com/en-us/library/yx7xezcf(v=VS.100).aspx