gpt4 book ai didi

c# - 为什么重命名 dll 扩展名(即重命名为 dllold)会在运行时导致 FileNotFound 异常?

转载 作者:行者123 更新时间:2023-11-30 14:51:50 27 4
gpt4 key购买 nike

似乎在某个时候,在我们其中一个站点上工作的开发人员必须手动更新生产 dll,我们将其称为“MyLibrary.dll”。为此,他们将旧的 dll 文件扩展名更改为“dllold”。加载此站点后,我们收到 System.IO.FileNotFoundException 错误,提示 Could not load file or assembly 'MyLibrary.dllold' 或其依赖项之一。系统找不到指定的文件。 即使“MyLibrary.dll”和“MyLibrary.dllold”都位于正确的目录中,我们仍收到此错误。只有在删除此“dllold”文件或完全删除扩展名的“dll”部分(即 MyLibrary.old)后,我们才能加载该网站。

所以我想知道为什么会发生这种情况?几乎看起来 .NET 框架的任何部分在运行时拉入 dll 只寻找“dll”并且不关心之后的任何事情,但这并不能解释为什么它总是捕获“.dllold”库而不是工作的“.dll”库。

作为引用,我们使用 .NET 4.0 版和 ASP.NET 4.6 版。

最佳答案

当加载 ASP.Net 项目时,它会尝试加载应用程序 bin 文件夹中的所有 DLL,它通过调用名为 LoadAllAssembliesFromAppDomainBinDirectory 的内部方法来实现。 .在该方法内部,使用 DirectortInfo.GetFiles(string) 检索 DLL。具有 *.dll 模式的方法。这与 .dllold 匹配,正如文档确认的那样:

When using the asterisk wildcard character in a searchPattern (for example, ".txt"), the matching behavior varies depending on the length of the specified file extension. A searchPattern with a file extension of exactly three characters returns files with an extension of three or more characters, where the first three characters match the file extension specified in the searchPattern. A searchPattern with a file extension of one, two, or more than three characters returns only files with extensions of exactly that length that match the file extension specified in the searchPattern. When using the question mark wildcard character, this method returns only files that match the specified file extension. For example, given two files in a directory, "file1.txt" and "file1.txtother", a search pattern of "file?.txt" returns only the first file, while a search pattern of "file.txt" returns both files.

在程序集加载过程的其他地方,假设文件名需要 .dll 后缀,这是一个不存在的文件,因此会抛出您看到的异常。

所以这个故事的寓意是:如果您需要停止加载 DLL,请将它从您的 bin 文件夹中删除,或者如果您必须将它留在那里,请给它一个不会发生的后缀匹配。

关于c# - 为什么重命名 dll 扩展名(即重命名为 dllold)会在运行时导致 FileNotFound 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33380983/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com