-1

我正在使用 .NET dll 文件进行图像操作,并使用解决方案资源管理器中的“添加引用”将其添加到我的 C# 应用程序中并使用它的类。有许多应用程序使用该 dll,所以我不想将 dll 文件放在应用程序特定的文件夹中,例如:

  • C:\Program Files\<Application Name>\或者
  • C:\Program Files (x86)\<Application Name>\或者
  • C:\ProgramData\<Application Name>\或者
  • C:\Users\<Username>\AppData\

并希望将 dll 文件放在一个普通文件夹中,例如C:\Windows\C:\Windows\System32文件夹或 Windows 中所有应用程序通常可以访问的任何其他文件夹。

当我将 dll 文件放在调用 exe 的同一文件夹中时它工作正常,但是当我将它放在C:\Windows\System32目录中时,我的应用程序的 C# 代码无法找到 dll 并给出错误:

无法加载 DLL:找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)

如何指示我的代码在 system32 目录或任何其他公共目录中查找 dll?

我可以将哪些其他常用文件夹用于共享 dll 和库?

4

1 回答 1

1

这就是全局程序集缓存的设计目的。如此处的 MS 文档中所列。

安装了公共语言运行时的每台计算机都有一个机器范围的代码缓存,称为全局程序集缓存。全局程序集缓存存储专门指定为由计算机上的多个应用程序共享的程序集。

但是使用它有一些陷阱,所以请注意 MS 自己的建议:

您应该仅在需要时通过将它们安装到全局程序集缓存中来共享程序集。作为一般准则,保持程序集依赖项私有,并将程序集定位在应用程序目录中,除非明确需要共享程序集。

于 2014-04-15T13:21:46.257 回答