为什么我的.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 DLLDynamic-Link Library Search Order

:

Windows然后按以下顺序搜索dll:

当前进程的可执行模块所在目录所在地。

当前目录。

Windows系统目录。GetSystemDirectory函数获取该目录的路径。

Windows目录。函数的作用是:检索目录目录路径。

在PATH环境变量中列出的目录。

我的问题是:

  1. 什么因素可能导致这个错误?
  2. 上述信息对。net有效吗?

为什么我的.net应用程序不加载位于添加到PATH环境变量的文件夹中的程序集

. net程序集和普通dll的规则是不一样的。您列出的规则适用于普通的旧dll。

程序集的加载异常复杂,但是基本的搜索顺序是这样的:

  1. 全局装配缓存(GAC)
  2. 其他位置的长列表(包括应用程序基目录,以及取决于区域性的各种子目录等)

环境变量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

查看你的。exe和。dll文件不会有什么坏处

用于排除组件加载故障- 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