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

Sal*_*dor 8 .net c# dll

我有一个.Net应用程序,它使用几个.Net dll,这些dll位于PATH环境变量中包含的文件夹中,但是当我启动我的.Net App时如果失败并出现错误:

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目录.GetWindowsDirectory函数检索此目录的路径.

PATH环境变量中列出的目录.

我的问题是:

  1. 哪些因素可能导致此错误?
  2. 以上信息对.Net有效吗?

Joh*_*hnD 18

.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

  • +1从来不知道.Net DLL没有与Win32 DLL相同的规则.谢谢! (3认同)
  • 微软是故意混淆视听吗?所以现在一个 dll 不再是一个 dll 了。为什么他们不对 .net dll 文件使用不同的扩展名。就像 .netdll 一样。无论如何很高兴知道,谢谢约翰。 (2认同)