DllImport如何识别最新的.dll版本?

3

我有一个WinForms应用程序,并且可以成功调用位于第三方DLL中的外部方法。该DLL文件可以位于我的计算机上的任何位置。

[DllImport("ext.dll")]
public static extern int Print(string cmd);

昨天,我从开发ext.dll的公司那里得到了一批东西,因为Print-Method中存在一个内部错误。该批次包含一个无bug版本的ext.dll。

现在我的问题是:DllImport如何找到我机器上任何位置的这个新的无bug版本并使用它而不是旧版本? 额外的信息:我使用DllImport,因为我无法通过VS中的“添加引用”添加dll文件。


1
它并不会,它使用一个搜索算法来找到dll,并加载它找到的第一个。 - Lasse V. Karlsen
没有圣诞老人,积极删除有缺陷的版本,这样 DLL 地狱就无法攻击你。 - Hans Passant
1个回答

6
p/invoke marshaller调用LoadLibrary(或LoadLibraryEx)并传递在DllImport属性中指定的文件名。这意味着系统使用Dynamic-Link Library Search Order来搜索DLL。我所链接的文档有所有详细信息。实质上,系统会在许多预定义位置进行搜索,第一个包含指定名称的文件的位置将被使用。

那么,接下来是你特定的问题:

DllImport如何找到我的任何地方都有的新版本并使用它而不是旧版本?

它不能。它使用动态链接库搜索顺序。如果搜索到最新版本的DLL,那么就加载它。如果较早版本的DLL首先出现在搜索中,则将加载该旧版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接