找不到程序集/文件的可能原因
本文关键字:程序集 文件 找不到 | 更新日期: 2023-09-27 18:35:59
我在一个创建解决方案的团队中工作。在解决方案中,我们有 4 个项目(数据访问、业务逻辑和单元测试以及常见事物)。
- 提单参考 DA 和 CT
- CT 参考文献 DA
- UT 参考 BL 和 CT
现在,每当我重建它时,它都不会带来任何错误。在我的同事 PC 上,它可以顺利工作,但在我的 PC 上,每当我尝试运行单元测试时,我都会收到以下错误(手动翻译成英文,因此在编写此问题时任何拼写错误都是我的错):
{"文件或程序集 ''"MyWorkspaceName.MySolutionname.CT, 版本=0.2.0.0,区域性=中性,公钥令牌=空"或引用 没有找到。系统找不到给定的 file.":"MyWorkspaceName.MySolutionname.CT, version=0.2.0.0, Culture=中性,PublicKeyToken=null"}
由于该版本和名称存在(这是我手动检查是否存在的常见部分),并且我还检查了 CT 内部的引用是否正确......我不确定它可能是什么原因导致它对我不起作用(但在我的同事 PC 上工作)。
因此,我的问题是:该错误消息的可能原因是什么?
更新:现在找到了 CT,但是当我尝试从 BL 访问 DA 时,它说的错误与以前相同,只是使用 DA 而不是 CT(从 UT 部分运行)。
当我从在同一解决方案中创建的控制台应用程序项目中运行 SAME 方法时,它们工作而不会引发任何错误。
有三种可能性,
- 不同的 CPU 体系结构,如果您同事的电脑是 x64,而您的电脑是 x86,则项目中的 DLL 引用设置可能会有所不同,这可能会产生此错误。
- 不同的文件夹结构。
- 不同的第三方参考,请参阅下面的详细信息。
您确定您已经安装了同事 PC 上的所有第三方工具/库吗?
最有可能的是,第三方引用应添加为 NuGet 包,但如果项目引用第三方程序集,而第三方程序集又引用通过某些安装程序安装的另一个程序集,并且计算机上不存在该程序集,则可能会收到类似的错误。我遇到了类似的问题,除非您打开程序集日志并进行调查,否则某些本机库不会错误地显示为依赖项。
您是否尝试在重建之前删除/obj 和/bin 文件夹?有时,旧的程序集引用缓存会弄乱生成过程。
下面是一个 PowerShell 脚本,用于递归擦除/bin 和/obj 文件夹。只需在主解决方案文件夹中运行它即可。
Get-ChildItem .' -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
我遇到的另一个可能的问题是,GAC 中安装的程序集与本地下载的 NuGet 包之间存在差异。 - 您的 VS 从 GAC 获取 DLL,但在您的队友计算机上,DLL 来自 NuGet,它是不同的版本。
在 VS 中获取程序集绑定信息: 工具 ->选项 -> 项目和解决方案 -> 生成和运行 -> MS 生成项目生成输出详细程度 -> 设置为"诊断",并在生成时将诊断信息复制粘贴到记事本++中,搜索"错误"和"冲突",然后解决。
如果我无法在有意义的时间内解决这些问题,我会寻求帮助以Process Monitor
在您的情况下,我会添加一个不太严格的过滤器,例如:路径包含.dll并在应用程序启动期间查找失败结果。这可能会揭示找不到哪些实际的 dll 文件以及查找它们的位置。
Visual Studio在信任系统上工作,这意味着您必须显式信任网络驱动器。 您是否尝试过将项目复制到本地硬盘驱动器以查看其是否有效?
这是微软关于如何使用CasPool.exe工具更改信任的文章。
Caspol.exe(代码访问安全策略工具)
只需对此进行一些说明,因此您不会错过任何内容。32 位和 64 位应用程序有不同的信任,因此请确保将信任应用于两者以避免任何问题。
在解决此工具的麻烦之前,我强烈建议您先复制到本地硬盘驱动器,看看这是否确实是问题所在。