类型或命名空间不存在

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

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

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

using A; using B; 

当我编译时,我得到了无法找到的投诉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  Error 59 The type or namespace name '' could not be found (are you missing a using directive or an assembly reference?) 

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

 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 

在这种情况下,.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. ---------------- 

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


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

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

  

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

  

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

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

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

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

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

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

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

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

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

基本上,这听起来像一个缺少参考。

我能想到的一些健全性检查是:

  1. 您确定生成错误的项目是C吗?
  2. 你确定你在使用中没有在命名空间B中拼写错误吗?
  3. 在编译C之前,B中是否会出现一些编译错误? (这可能导致编译器在B中找不到命名空间)。
  4. 您是否有任何其他编译错误或警告?

编辑

另一个建议是:B组件中的类被定义为public

我在更新我们通常通过NuGet使用的项目时得到了这个。 我想如果我只是将更新的内置dll复制到packages文件夹,我可以测试它,而不必在我的机器上设置NuGet,但它并不那么简单,因为我的应用程序仍然在寻找旧的版本号。 希望能帮到那里的人。

经过几个小时的挫折,我发现了使用VS2017解决方案解决此问题的以下过程:

 Insure that all reference assemblies have been recognized and have current properties. If assemblies do not show proper reference, right click the entry and view properties. This action often resets the reference. This action must be completed for each project in the solution. After resolving all references, if the error continues, delete the following: -The Obj folder -The Bin folder -Reference to the offending assembly -Clean and Rebuild the solution. Errors should occur. -Re-reference the needed assembly. The editor should no longer show the namespace error and build should succeed. 

创建干净的项目并测试您在项目中使用的最小组件集。 这样,您将确定解决方案中是否存在不良内容,或者新创建的项目是否具有相同的症状。 如果是这样,那么VS,.net等可能已损坏或其他。

在尝试解决另一个问题时,我突然开始收到此错误

我通过转到Solution => properties => project dependencies解决了这个问题,所有依赖项都关闭了我得到命名空间错误的两个项目。 我检查了复选框并重建了解决方案,没有任何错误。

我在C#6.0中使用global::[namespace][type I want to use]解决了这个问题

使用VS2017,当我的解决方案中的项目被卸载时,这个问题就出现了。