1

我试图通过强制它加载和使用当前目录中的DLL而不是windows目录来制作一个适用于每个操作系统的程序,但它不起作用。我尝试启用“复制本地”并更改引用路径,但没有任何成功,程序尝试从 windows 目录加载 DLL。我的问题是:我该如何解决这个问题?

4

2 回答 2

2

DLL 的搜索顺序记录在 MSDN 上。它还包括有关如何修改搜索顺序以便首先搜索本地 bin 目录而不是 GAC 的说明。

于 2012-07-03T16:18:02.163 回答
0

该目录%windir%\assembly称为GAC。程序集不会在那里复制,而是通常使用gacutil /i安装包或通过安装包安装。

GAC 是一个合适的文件夹,用于存放许多其他库和未集中协调的构建版本中的应用程序引用的库。使用 GAC 可以让您拥有同一个库的多个版本,即使是单个应用程序也可能间接需要所有这些版本,并在系统上并排安装。典型的例子是 .NET 框架本身。

您构建的程序集可能不是那种。基本上是单个应用程序一部分的应用程序程序集和库不应该提交给 GAC,否则您可能会遇到麻烦。有多种可能的麻烦:

  • 一个人意外或故意创建具有相同版本号的同一库的不同(不兼容)版本。
  • GAC 中的程序集引用了一个不在 GAC 中的程序集
  • 一个应用程序将相同的程序集安装到 GAC 中,但另一个应用程序希望从其本地文件夹(应用程序二进制文件所在的位置)加载它。

加载程序集时,GAC 中的代码会获得首选项。要从 GAC 中删除程序集,请使用gacutil /u.

于 2012-07-03T15:59:24.083 回答