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

时间:2011-07-02 18:27:10

标签: 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;

当我编译时,我得到了无法找到的投诉B. A很好。 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?)    

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

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文件中:

<ProjectReference Include="..\..\..\..\..\..\..\Partners\integration\framework\connectors\Partners.Connectors.Base\Partners.Connectors.Base\Partners.Connectors.Base.2010.csproj">

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

<ProjectReference Include="C:\...\Partners.Connectors.Base.2010.csproj">

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

12 个答案:

答案 0 :(得分:21)

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

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

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

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

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

答案 1 :(得分:12)

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

答案 2 :(得分:9)

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

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

答案 3 :(得分:7)

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

引用.net 4.5

答案 4 :(得分:1)

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

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

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

    另一个建议:B程序集中的类是否定义为public

答案 5 :(得分:1)

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

答案 6 :(得分:1)

经过数小时的挫折,我发现以下过程可通过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.

答案 7 :(得分:0)

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

答案 8 :(得分:0)

我在尝试解决另一个问题时突然开始出现此错误

我通过转到Solution =&gt; properties =&gt;项目依赖项解决了这个问题,并且我得到了一个名称空间错误的两个项目的所有依赖项都已关闭。我检查了复选框并重建了解决方案,没有错误。

答案 9 :(得分:0)

我在C#6.0

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

就我而言,我必须检查“ WorkFlow” 1 的实现位置。 因此,我将比较使用此“ WorkFlow”的项目/类库的框架版本。 检查所有项目/类库都使用相同的框架后,我必须在引起构建错误的项目/类库中搜索“ .WorkFlow”。

C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Workflow.Targets(121,5): 错误:类型或名称空间名称“ WorkFlow”不存在 命名空间“ Proyect_to_build”(您是否缺少using指令或 程序集参考?)

事实证明,“参考”文件夹中缺少包含“ WorkFlow”的.dll。添加.dll后,项目/类库将成功编译。

同样,就我而言,我没有使用此.dll,我只需要编译项目/类库以在程序的某些部分启用断点(其中完全不涉及“ WorkFlow” ),但是,添加它(带有“ WorkFlow”源代码的.dll)之后,就可以编译了。


1 “工作流”来自使用工作流的自定义代码的旧代码。