代码库列出了引用程序集的错误路径

Codebase lists wrong path for referenced assemblies

提问人:stigzler 提问时间:9/14/2023 更新时间:9/14/2023 访问量:7

问:

我在引用的程序集时遇到了问题。我有一个类库,它本质上是另一个应用程序的插件。此应用程序在文件夹中查找插件 .dll 文件。我已经对我的文件进行了结构化,以便除了主插件类库dll之外的所有dll都位于一个子文件夹中:以保持根目录整洁。PluginsPlugins\Infoz\libPlugins

因为它们在另一个位置,所以我通过以下方式加载这些:

rootpath = FileOp.CombinePaths(Constants.GameExRootDir, "Plugins\Infoz\lib")

For Each file In Directory.GetFiles(rootpath, "*.dll", SearchOption.TopDirectoryOnly)
    Assembly.LoadFrom(file)
Next

这在我的开发机器上工作正常。但是,在部署计算机上,库会运行,但是当我第一次尝试使用LiteDB成员时,我收到以下错误:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not load file or assembly 'LiteDB, Version=4.1.4.0, Culture=neutral, PublicKeyToken=4ee40123013c9f27' or one of its dependencies. The system cannot find the file specified.
File name: 'LiteDB, Version=4.1.4.0, Culture=neutral, PublicKeyToken=4ee40123013c9f27'

如果我再往下看异常文本,我会看到以下内容:

LiteDB
    Assembly Version: 4.1.4.0
    Win32 Version: 4.1.4
    CodeBase: file:///C:/GameEx/PLUGINS/LiteDB.dll

代码库列出了错误的文件位置。此外,所有其他第三方 dll 都有此错误的路径。

因此,我尝试枚举所有程序集,以便在加载后立即显示它们的代码库位置。目的是在我的开发和部署机器上记录这些内容,以查看 ref'd 程序集的代码库在我的(工作)开发安装中是否也是错误的。我尝试了以下代码:

Dim a As Assembly = Assembly.GetExecutingAssembly()
For Each aName In a.GetReferencedAssemblies()
    Log.Log_Data("Assembly Code Base: " & aName.Name & " - " & aName.CodeBase)
Next

这将成功列出所有 ref'd 程序集。但是,始终为 null。aName.CodeBase

就 Windows 版本(均为 64 位)而言,开发和部署计算机之间没有问题。开发是在 Framework 3.5 上(这是由于应用程序在此版本上的要求)。

我完全被困在如何尝试进一步隔离此错误上。有什么想法吗?

.NET 程序集 litedb

评论


答: 暂无答案