你错过了装配参考吗?

时间:2009-10-20 17:52:35

标签: visual-studio-2008 assemblies visual-sourcesafe

我得到了欢乐的'类型或命名空间名称“Something”在命名空间“Something”中不存在(你错过了程序集引用吗?)'错误。

我所拥有的是一个网站项目,其中包含网站本身以及网站所依赖的其他几个自定义项目。我遇到的问题是网站所依赖的项目之一,我们称之为A.它依赖于一个不同的自定义项目,称为B.

所以,B是解决方案的一部分,我可以成功构建B. A有对B的引用,并且似乎没有任何错误(没有小的黄色三角形感叹号)。该网站本身也在其Bin文件夹中包含A和B的dll。它还有一个B的dll.refresh文件,它不正确(错误的路径)。但是,手动更正dll.refresh似乎没有任何效果。从网站的bin文件夹中删除这些文件也没有任何效果。

我也尝试从解决方案中删除A和B,然后读取它们。我也试过删除A对B的引用然后再添加它(都来自项目选项卡并手动浏览到.dll本身)。

我也标记了这个Visual Source Safe,因为该项目一直有效,直到我从源代码控制获得最新版本,所以这个问题肯定与我的一个同事(有意或无意)有所改变有关。我怀疑它是由项目的不同文件系统布局引起的,但我不确定,如果是这种情况,我不明白为什么我无法解决问题。

这是Fusion日志的结果,我还没有完全理解它。

    *** Assembly Binder Log Entry  (10/20/2009 @ 1:43:06 PM) ***

    The operation failed.
    Bind result: hr = 0x80070002. The system cannot find the file specified.

    Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
    Running under executable  C:\Windows\SysWOW64\inetsrv\w3wp.exe
    --- A detailed error log follows. 

    === Pre-bind state information ===
    LOG: User = NT AUTHORITY\NETWORK SERVICE
    LOG: DisplayName = A, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
     (Fully-specified)
    LOG: Appbase = file:///C:/source/ProjectRoot/Project/Website/
    LOG: Initial PrivatePath = C:\source\ProjectRoot\Project\Website\bin
    LOG: Dynamic Base = C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\6db59b13
    LOG: Cache Base = C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\6db59b13
    LOG: AppName = 1601d5b6
    Calling assembly : ProjectBO, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
    ===
    LOG: This bind starts in default load context.
    LOG: Using application configuration file: C:\source\ProjectRoot\Project\Website\web.config
    LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework\v2.0.50727\Aspnet.config
    LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
    LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
    LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/6db59b13/1601d5b6/A.DLL.
    LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/6db59b13/1601d5b6/A/A.DLL.
    LOG: Attempting download of new URL file:///C:/source/ProjectRoot/Project/Website/bin/A.DLL.
    LOG: Attempting download of new URL file:///C:/source/ProjectRoot/Project/Website/bin/A/A.DLL.
    LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/6db59b13/1601d5b6/A.EXE.
    LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/6db59b13/1601d5b6/A/A.EXE.
    LOG: Attempting download of new URL file:///C:/source/ProjectRoot/Project/Website/bin/A.EXE.
    LOG: Attempting download of new URL file:///C:/source/ProjectRoot/Project/Website/bin/A/A.EXE.
    LOG: All probing URLs attempted and failed.


从这一行判断:“日志:初始PrivatePath = C:\ source \ ProjectRoot \ Project \ Website \ bin”它看起来像是在网站bin中的dll之后而不是跟在与项目相关的dll之后答:但是,我没有看到任何提及。无论如何,希望这会有所帮助,顺便说一下,我会继续研究Fusion,很酷的工具!

3 个答案:

答案 0 :(得分:2)

当目标框架为“.NET Framework 4 Client Profile”的项目引用具有“.NET Framework 4”目标框架的项目时,出现此错误。

希望这有助于某人,如果不是原始海报。

答案 1 :(得分:1)

在这种情况下,Fusion日志始终是一个很好的起点。

如果我不得不猜测,你的一个队友已经将B的项目(正确方式)的引用更改为B的实际副本(通过浏览到B项目的Bin文件夹并添加对那里找到的DLL的引用)。

清理解决方案,从A中删除对B的引用,构建B,向B添加项目引用,重建并测试A.

如果这样可以解决问题,请收集您的同事并向他们解释直接引用DLL的危险。

答案 2 :(得分:0)

事实证明一个队友重命名了一个命名空间,所以我真的错过了一个程序集引用,我只觉得我不是。感谢Will的帮助。