类型或命名空间<blah>不存在

Dan*_*ams 23 c# compiler-errors

好吧,我之前已经有过这一百万次,并且之前已经回答了100万次+1.

然而,又一次.我有3个项目,A,B和C,每个都是一个DLL.每个项目都是.Net 4.0(不是客户端构建,完整4.0).项目C引用A和B.它们作为项目引用,输出设置为本地复制.

在C中,我的.cs文件中有两个using语句:

using A;
using B;
Run Code Online (Sandbox Code Playgroud)

当我编译时,我得到了无法找到的投诉B.答案很好.B取决于A.

我该怎么办?我删除并重新添加,关闭VS2010,重新打开它,查看.csproj文件.我只是无法得到它.再次,第一百万次.

请有人给我一个足够的感觉,让我一劳永逸地学习这个来源!

是的,这可能在StackOverflow中的某个地方得到了解答,但在我迄今为止检查的任何顶级答案中都没有.这些术语过于通用而无法使用,太多问题的答案是"duh,添加引用".我已经过了那一点.

这是我得到的错误.有3种,但从过去的经验来看,最后一种是真实的.

Error   130 'AWI.WWG.EXPMRI.MriUpload.Data.MriUpload' does not contain a definition for 'Database' and no extension method 'Database' accepting a first argument of type 'AWI.WWG.EXPMRI.MriUpload.Data.MriUpload' could be found (are you missing a using directive or an assembly reference?) 

Error   114 'object' does not contain a definition for <blah>

Error   59  The type or namespace name '<blah>' could not be found (are you missing a using directive or an assembly reference?)    
Run Code Online (Sandbox Code Playgroud)

啊啊我看了警告,而不仅仅是错误,这就是我所看到的:

Warning 69  The referenced project '..\..\..\..\..\..\..\Partners\integration\framework\connectors\Partners.Connectors.Base\Partners.Connectors.Base\Partners.Connectors.Base.2010.csproj' does not exist.  AWI.WWG.EXPMRI.MriUpload.Objects
Run Code Online (Sandbox Code Playgroud)

在这种情况下,.csproj文件是"B".即使我删除并重新添加项目引用,我得到了这个.但感觉我越来越近了!

嗯,我刚发现另一个DLL,称之为"D",其中"A"引用.当我将它添加到项目中时,我开始收到投诉:

----------------
The  Add Reference Dialog could not be shown due to the error:

The specified path, file name, or both are too long.  The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
----------------
Run Code Online (Sandbox Code Playgroud)

这可能是相关的,还是只是另一个分心?


好的,我发现了这个问题,虽然我不明白.

当我通过IDE添加引用时,它将它添加到"C"的csproj文件中:

<ProjectReference Include="..\..\..\..\..\..\..\Partners\integration\framework\connectors\Partners.Connectors.Base\Partners.Connectors.Base\Partners.Connectors.Base.2010.csproj">
Run Code Online (Sandbox Code Playgroud)

这不编译,它警告它找不到引用的项目,然后发生所有那些ERROR.但后来我将ProjectReference更改为以下内容:

<ProjectReference Include="C:\...\Partners.Connectors.Base.2010.csproj">
Run Code Online (Sandbox Code Playgroud)

......它运作得很好.请注意,这些路径都不会接近256个字符.完全限定的只有135个字符.但也许IDE正在做一些愚蠢的路径装饰.

Dan*_*ams 21

该解决方案与Windows中的文件路径限制有关,它们将IDE相对路径转换为完整路径,如本博客中所述.

直接的解决方案是手动编辑csproj文件以使用绝对路径.在重新添加引用之前,绝对路径将是有效的.有一天,我可能会缩短我的文件夹,但目前并不是最重要的.

如果您怀疑自己遇到此问题,请查看编译器发出的警告消息.我经常关掉这些,只看错误.但是关于"引用的项目不存在"的警告是解决这个问题的线索.

如果其他链接消失,这里是MS文章的链接. http://support.microsoft.com/kb/2516078

值得注意的是,同样的错误表明了各种问题,例如客户端框架定位问题,并且在引用无法加载时记录为警告.据推测,参考错误只是一个警告,因为如果实际上不需要参考,则无关紧要.

  • +1提及看警告.让我直接谈到这个问题.谢谢! (11认同)

Gus*_*ori 12

我会确保您的项目包含对程序集的引用.

在此输入图像描述

我会检查构建顺序是否与您的依赖项匹配

在此输入图像描述

最后,如果一切设置正确,您应该看到以下构建顺序:

在此输入图像描述

看起来这不是你的问题,但为了完整性,我应该添加另一件事来检查(如果你的项目的目标是.NET Framework 3.5或更高版本)是两个项目的Target Framework匹配.如果要从完整版本的Framework链接以客户端配置文件为目标的内容,您还会收到"未找到"错误:

在此输入图像描述


小智 9

转到警告部分并解决所有警告,您就完成了......

警告部分将告诉您所引用项目所需的所有内部dll依赖项.

  • 这个评论是黄金.非常感谢! (2认同)

dwb*_*rtz 7

我知道这不是您的问题的答案,但是当您尝试引用具有比您正在使用的.net版本更高的.net版本的项目时,错误非常相似.IE:你不能从.net 3.5引用.net 4.5