找不到汇编/文件的可能原因?

时间:2015-01-02 09:02:35

标签: c# .net

我在一个创建解决方案的团队中工作。在解决方案中,我们有4个项目(数据访问,业务逻辑和单元测试以及常见事物)。

  • BL引用DA和CT
  • CT引用DA
  • UT引用BL和CT

现在每当我重建它都不会带来任何错误。在我的同事PC上工作顺利,但在我的电脑上,每当我尝试运行单元测试时,我都会收到以下错误(手动翻译成英文,所以在撰写此问题时,任何拼写错误都是我的错误):

  

{"文件或程序集\" MyWorkspaceName.MySolutionname.CT,   version = 0.2.0.0,Culture = neutral,PublicKeyToken = null \"或参考   没找到它。系统找不到给定的   文件。":" MyWorkspaceName.MySolutionname.CT,版本= 0.2.0.0,   Culture = neutral,PublicKeyToken = null"}

由于该版本和名称存在(这是常见的事情,我手动检查它是否存在)我还检查了CT内部的参考是否正确.....我不知道是什么可能是因为它不能为我工作(但是在我的同事PC上工作)。

因此,我的问题是:该错误信息可能是什么原因?

更新 现在可以找到CT,但是当我尝试从BL访问DA时,它表示与之前的DA相同的错误,而不是CT(从UT部分运行)。

当我从同一解决方案中创建的控制台应用程序项目运行SAME方法时,它们可以正常工作而不会产生任何错误。

4 个答案:

答案 0 :(得分:2)

有三种可能性,

  1. 不同的CPU架构,如果您的同事的PC是x64且您的是x86,则项目中的DLL参考设置可能会有所不同,这可能会产生此错误。
  2. 不同的文件夹结构。
  3. 不同的第三方参考资料,请参阅以下详细信息。
  4. 您确定已经安装了同事PC上的每个第三方工具/库吗?

    很可能第三方引用应该作为NuGet包添加,但如果您的项目引用第三方程序集,而第三方程序集又引用通过某些安装程序安装的另一个程序集,并且您的计算机上没有该程序集,则可能会出现类似的错误。我有类似的问题,并且一些本机库不会作为依赖项显示错误,除非您打开汇编日志并进行调查。

答案 1 :(得分:0)

您是否尝试在重建之前删除/ obj和/ bin文件夹?有时会出现旧的程序集引用缓存,这会使构建过程变得混乱。

这是一个用于递归擦除/ bin和/ obj文件夹的PowerShell脚本。只需在主解决方案文件夹中运行它。

Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse } 

我遇到的另一个可能的问题是GAC中安装的程序集和本地下载的NuGet程序包之间存在差异。 - 您的VS从GAC获取DLL,但在您的团队配对计算机上,DLL来自NuGet,它是不同的版本。

要在VS中获取程序集绑定信息:工具 - >选项 - >项目和解决方案 - >构建并运行 - > MS Build项目构建输出详细程度 - >设置为Diagnostic并在构建时将诊断信息复制粘贴到记事本++并搜索错误'和'冲突'然后解决。

答案 2 :(得分:0)

通常如果我无法在有意义的时间内解决此类问题,我会向Process Monitor寻求帮助

在你的情况下,我会添加一个不太严格的过滤器,例如:Path包含.dll,并在应用程序启动期间查找失败结果。这可能会揭示无法找到哪些实际的dll文件以及它们被查找的位置。

答案 3 :(得分:0)

Visual Studio适用于信任系统,这意味着您必须明确信任网络驱动器。您是否尝试将项目复制到本地硬盘以查看它是否有效?

以下是微软关于如何使用CasPool.exe工具更改信任的文章。

Caspol.exe (Code Access Security Policy Tool)

关于这一点的几点说明让你不要错过任何东西。对于32位和64位应用程序,存在不同的信任,因此请确保将信任应用于两者以避免任何问题。

在您遇到此工具的问题之前,我强烈建议您先复制到本地硬盘驱动器,看看是否确实存在问题。