获取“无法找到类型或命名空间名称”,但一切似乎都可以吗?

问题描述 投票:243回答:32

我得到了:

找不到类型或命名空间名称

VS2010中的C#WPF应用程序出错。这段代码编译得很好,但突然间我收到了这个错误。我已经尝试删除Project Reference和using语句,关闭VS2010并重新启动,但我仍然有这个问题。

任何想法为什么会发生这种情况,似乎我正在做正确的事情参考&using声明?

我还在VS2010中注意到该命名空间的intellisense工作正常,所以看起来VS2010有项目引用并且一方面看到命名空间,但是在编译期间看不到它?

c# visual-studio reference namespaces directive
32个回答
432
投票

这可能是两个项目之间.Net框架版本不兼容的结果。

它可以通过两种方式实现:

  1. 引用完整框架项目的客户端配置文件项目;要么
  2. 针对较新框架版本的较旧框架版本

例如,当应用程序设置为以.Net 4 Client Profile框架为目标,并且它引用的项目以完整的.Net 4框架为目标时,就会发生这种情况。

所以要更清楚:

  • 项目A面向客户端配置文件框架
  • 项目A参考项目B.
  • 项目B以完整框架为目标

在这种情况下,解决方案是升级应用程序的框架目标(项目A),或降级引用程序集的目标(项目B)。完整的框架应用程序可以引用/使用客户端配置文件框架程序集,但不能反过来(客户端配置文件不能引用完整的框架目标程序集)。

请注意,在VS2012或VS2013(使用.Net 4.5作为默认框架)中创建新项目时,也会出现此错误,并且:

  • 引用项目使用.Net 4.0(当您从VS2010迁移到VS2012或VS2013然后添加新项目时,这很常见)
  • 引用的项目使用更大的版本,即4.5.1或4.5.3(您已将现有项目重新定位到最新版本,但VS仍然创建针对v4.5的新项目,然后您引用这些旧项目来自新项目)

2
投票

[Facepalm]我的问题是我在C ++的做事方式中添加了依赖。

转到不会构建的项目,打开解决方案资源管理器中的“References”文件夹,查看是否列出了依赖项。

如果没有,您可以“添加引用”并选择“项目”选项卡上的依赖项。

Boom Shankar。


2
投票

将现有项目从VS2008升级到VS2012时遇到此问题。我发现有两个项目(我创建的只有两个)针对不同的.Net框架(3.5和4.0)。我通过确保两个项目在Target Framework框中都有“.NET Framework 4”,在项目的Application选项卡上解决了这个问题。


2
投票

在我的例子中,我发现VisualStudio中的引用有一个三角形和一个感叹号作为这个图像,

然后,我右键单击删除它,再次正确添加dll引用,问题解决了。


2
投票

我遇到了与上面讨论过的相同的问题:VS 2017将引用项目中的一个类强调为错误,但解决方案构建正常甚至智能感知都有效。

以下是我设法解决此问题的方法:

  1. 卸载引用的项目
  2. 在VS中打开.proj文件(我正在寻找重复项,因为有人在这里建议)
  3. 重新加载项目(我没有更改甚至保存proj文件,因为我没有任何重复项)

1
投票

您也可以尝试删除您认为遇到问题的代码,看看它是否编译时没有引用该代码。如果没有,请修复它,直到它再次编译,然后重新处理您怀疑的问题代码。有时候,当编译器不喜欢其他东西时,我会发现我知道正确的类或方法的奇怪错误。一旦我修复了它真正被挂起的东西,这些“幽灵”错误就会消失。


1
投票

在我的情况下,问题是在将名称空间更改为与另一个项目中的名称完全相同(有意)之后,程序集的名称也被VS更改,因此有两个具有相同名称的程序集,一个覆盖另一个


1
投票

我知道这是踢死马,但我有这个错误和框架哪里好。我的问题基本上是说找不到接口,但它构建和访问就好了。所以我开始思考:“当别人工作正常时,为什么只有这个界面呢?”

最后,我实际上是使用WCF访问服务,端点的接口使用的是Entity Version 6,其余项目使用的是版本5.而不是使用NuGet我只是将nuget包复制到本地存储库以便重用,以不同的方式列出

例如EntityFramework6.dll与EntityFramework.dll。

然后我添加了对客户端项目和poof的引用,我的错误消失了。我意识到这是一个边缘案例,因为大多数人不会混合实体框架的版本。


1
投票

添加我的解决方案,因为它有点不同,并花了我一段时间才弄明白。

在我的情况下,我为一个项目添加了一个新类,但由于我的版本控制绑定未设置,我需要使文件在Visual Studio外部(通过VC)可写。我已经取消了Visual Studio中的保存,但在我将文件写入VS外部后,我再次在VS中点击Save All。这无意中导致新的类文件没有保存在项目中..所以..Intellisense仍然在引用项目中显示为蓝色和有效,即使我尝试重新编译文件时未找到并获得了找不到类型错误。关闭并打开Visual Studio仍然显示问题(但如果我注意到重新打开时缺少类文件)。

一旦我意识到这一点,修复很简单:将项目文件设置为可写,将缺少的文件读入项目。现在一切都很好。


1
投票

我遇到过同样的问题。一天晚上,我的项目将在第二天早上编译错误!

我最终发现视觉工作室决定“调整”我的一些参考文献并将它们指向其他地方。例如:

System.ComponentModel.ISupportInitialize以某种方式成为“blahblah.System.ComponentModel.ISupportInitialize”

如果你像我一样,对你而言,这是一件非常粗鲁的事情


1
投票

有相同的错误,我的故事是:在糟糕的合并(通过git)我的.csproj文件之一有重复的compile条目,如:

<Compile Include="Clients\Tree.cs" />
<Compile Include="Clients\Car.cs" />
<Compile Include="Clients\Tree.cs" />        //it's a duplicate

如果您在错误窗口中有一个大解决方案和超过300条消息,则很难检测到此问题。所以我通过记事本打开了损坏的.csproj文件并删除了重复的条目。在我的案例中工作。


40
投票

重新安装nuget包对我来说很有用。在我将.NET Framework版本更改为所有项目的同步之后,仍然为以前的版本安装了一些nuget包(尤其是Entity Framework)。 Packages Manager Console中的此命令将重新安装整个解决方案的包:

Update-Package –reinstall

1
投票

它发生在Visual Studio 2017中。

  1. 重新启动Visual Studio
  2. 清理无法构建的项目。
  3. 重建项目。

1
投票

要解决此问题,它还可以帮助删除和重新创建相关解决方案的*.sln.DotSettings文件。


1
投票

在我的情况下,我有一个列在正确的源文件夹中的类,但没有在解决方案资源管理器中注册。我必须右键单击项目>添加现有项目并手动选择它说它丢失的类。一切都很好!


0
投票

在我的情况下,我有一个由外部依赖(xsd2code)构建的文件,并且不知何故,它的designer.cs文件没有被VS正确处理。在Visual Studio中创建一个新文件并粘贴其中的代码对我来说是个窍门。


0
投票

对于那些在尝试将自己的网站发布到Azure时遇到此错误的人来说,上述有前途的解决方案都没有帮助我。我在同一条船上 - 我自己的解决方案很好。我最终不得不这样做

  1. 删除我的解决方案中的所有nuget包。
  2. 关闭并重新打开我的解决方案。
  3. 重新添加所有nuget包。

有点痛苦,但这是我可以让我的网站发布到Azure的唯一方法。


0
投票

在我的情况下,我进入了解决方案属性,并确保在两个项目的配置中检查了“Build”。我的主要项目没有检查。

enter image description here


0
投票

我尝试使用在本地计算机上作为代理运行的Visual Studio Team Services构建进行构建时出现此错误。

它在我的常规工作区中工作得很好,我能够在本地代理文件夹中打开SLN文件,所有编译好了。

有问题的DLL作为Lib/MyDLL.DLL存储在项目中,并在csproj文件中引用它:

<Reference Include="MYDLL, Version=2009.0.0.0, Culture=neutral, PublicKeyToken=b734e31dca085caa">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>Lib\MYDLL.dll</HintPath>
</Reference>

事实证明,尽管有提示路径,但实际上并没有找到文件。我想也许msbuild相对于SLN文件而不是项目文件。

在任何情况下,如果你得到的消息是Could not resolve this reference. Could not locate the assembly然后确保DLL在msbuild的可访问位置。

我有点作弊,并发现一条消息,说Considered "Reference\bin\xxx.dll"并且只是将dll复制到那里。


0
投票

我的情况与此处讨论的相同,但直到我从参考列表中删除了System.Core引用时才解决它(没有它就一切正常)

希望它会帮助别人,因为这个问题非常令人沮丧


0
投票

在我的例子中,添加dll作为参考给出了type or namespace name could not be found错误。但是,直接在bin文件夹中复制和粘贴dll文件解决了错误。

不知道为什么会这样。


0
投票

我知道这个线程已经老了但无论如何我正在共享,我必须安装导入程序集的所有第三部分依赖项 - 因为导入的程序集不包含在Nuget包中,因此缺少依赖项。

跳这个帮助:)


27
投票

在构建解决方案时,我遇到了同样的错误(无法找到类型或名称空间')。在它下面我看到一个警告,指出“无法解析引用”并确保“程序集存在于磁盘上”。

我很困惑,因为我的DLL非常清楚地位于引用指向的位置。在我尝试构建解决方案之前,VS似乎没有强调任何错误。

我终于意识到了问题(或者至少我怀疑是问题)。我在同一个解决方案中构建库文件。因此即使它存在于磁盘上,它也在该位置重建(在某个过程中,库重建我的其他项目 - 在同一个解决方案中 - 引用库必须已经确定库不存在)

当我右键单击项目并仅构建它时,而不是整个解决方案,我没有得到错误。

为了解决这个问题,我将库添加为正在使用它的项目的依赖项。

去做这个:

  1. 我在解决方案资源管理器中右键单击了我的解决方案并选择了“属性”
  2. 然后在“Common Properties”中选择“Project Dependencies”。
  3. 然后在Projects下拉菜单中,我选择了依赖库的项目,和
  4. 选中“Depends On”下的库旁边的复选框

这可确保首先构建库项目。


0
投票

在我的情况下,我在一个解决方案中有两个项目,我在引用的项目中添加了一个子命名空间,但是在构建时,我没有注意到引用的项目构建失败并且它使用了最后一个成功构建的版本,但没有有这个新的命名空间,所以错误是正确的,它无法找到,因为它不存在解决方案显然是修复引用项目中的错误。


25
投票

我不知道为什么会这样,但我删除了VS2015告诉我它无法找到的项目参考,并再次添加。解决了这个问题。我试过清洁,建立和重新启动VS无济于事。


7
投票

首先,我将验证您的项目生成的信息是否已损坏。对解决方案进行清理和重建。

如果这没有帮助,我过去看到的有关设计师问题的一件事就是打开一个Windows窗体项目,然后再关闭它。不过,这是一个小小的内脏,所以不要屏住呼吸。


5
投票

我遇到的一个棘手的情况是:项目一目标是安装了Microsoft.Bcl.Async软件包的4.0完整框架。项目二针对4.0完整框架,但在引用Project一个类时不会编译。

一旦我在第二个项目上安装了Async NuGet包,它编译得很好。


4
投票

这个对我有用。在您的类中,定义类名,例如:公共类ABC,删除一个字符并稍等一下。您的错误列表将增加,因为您已更改名称。现在放回你输入的字符。这对我有用,希望它也适合你。祝好运!!!


4
投票

我遇到了类似的问题:编译器无法检测同一项目中的文件夹,因此链接到该文件夹​​的using指令生成错误。就我而言,问题源于重命名文件夹。即使我更新了该文件夹中所有类的命名空间,项目信息也无法更新。我尝试了一切:删除.suo文件和bin和obj文件夹,清理解决方案,重新加载项目 - 没有任何帮助。我通过删除文件夹和里面的类来解决问题,创建一个新文件夹并在该新文件夹中创建新类(只是移动新文件夹中的类没有帮助)。

PS:就我而言,我正在开发一个Web应用程序,但这个问题可能出现在不同类型的项目中。


2
投票

我们有一个奇怪的例子,我刚刚解决了这个问题。在主项目中的“using”语句前面有一个隐藏/空白字符。该项目将构建良好,网站工作正常,但引用它的单元测试项目无法构建。

© www.soinside.com 2019 - 2024. All rights reserved.