类型或命名空间不存在。

365

我有一个使用Visual Studio 2010构建的WCF数据服务项目,之前一直正常工作。突然间就无法编译了,提示错误信息如下:

Error 7:在命名空间'System.Data'中不存在名称为'Services'的类型或命名空间。(是否缺少程序集引用?)C:\U...s\Visual Studio 2010\Projects...\DataService.cs ...

Error 8:在命名空间'System'中不存在名称为'Linq'的类型或命名空间。(是否缺少程序集引用?)DependencyResolver.cs 3 14

Error 10:在命名空间'System.ServiceModel'中不存在名称为'Web'的类型或命名空间。(是否缺少程序集引用?)

Error 12:找不到名称为'DataService'的类型或命名空间。(是否缺少using指令或程序集引用?)

我该如何解决这个问题?


4
即使加了这些,错误信息仍然存在。 - Attilah
1
我的问题非常简单,我忘记添加对“System.Data.Services”的引用。 - Chris Schiffhauer
3
我认为这是因为虽然答案很有用,但原始问题非常开放,不太可能与其他人相关,即使答案确实如此。 - WongKongPhooey
1
如果您在使用Microsoft.BclMicrosoft.Bcl.AsyncMicrosoft.Bcl.Build的项目中遇到此错误信息,则需要在引用您的项目的任何项目中添加对它们的引用。虽然这很麻烦,但可以通过NuGet轻松完成。 - Philip Atz
我一直遇到这个错误,可能是因为在Visual Studio中切换分支或者复制粘贴文件夹从一个项目到另一个项目(在同一个解决方案中),我无法引用一些类,所以我尝试重新启动Visual Studio,但是这个错误没有被修复。卸载项目然后重新加载解决了这个问题。 - undefined
显示剩余5条评论
17个回答

702

我曾经遇到过同样的问题,需要将所有项目的“目标框架”设为相同的值。然后就可以正常构建了。在“项目”菜单中,点击“项目名称属性”。点击“编译”选项卡。点击“高级编译选项”。在“目标框架”中选择你所需的框架。


13
我通过右键单击解决方案资源管理器中的项目并选择属性来设置“目标框架”。在默认应用程序选项卡中应该能看到“目标框架”。 - Cookie
4
在某些情况下这是一个解决方案,至少在我的情况下是这样。由于某种原因,我的项目拒绝接受来自同一解决方案中已存在的命名空间。问题在于控制台应用程序的目标是客户端档案。 - Amadiere
77
+1。这个错误信息非常误导人。可能让我节省了数小时的研究时间。嘿,微软,怎么样改成“由于BLAH版本不兼容,无法导入命名空间BLAH”呢?但这样可能会剥夺Nathan获得184个赞的机会。 - Gerald Davis
3
有没有解决方案可以应对我们无法更改项目目标框架的情况? - Raj123
6
在Visual Studio中从“错误列表”选项卡切换到“输出”选项卡后,我发现了实际的错误(事实上是导致错误的警告)。实际上缺少对其他库(在我的情况下是Microsoft.Bcl)的引用。 - Stefan
显示剩余6条评论

51

我遇到了System.Linq无法识别的问题。使用语句出现了红色下划线,等等。我解决这个问题的方法是将我的网站更改为针对dotnet 3.5,然后再切换回原来的目标框架(在我这种情况下是4.0)。


2
也对我有用!但我不得不做两次... 真费脑筋! - nicholeous
手动合并了同一个应用程序的不同目标框架的一些web.config文件后,web.config停止工作,并出现了500内部服务器错误。按照描述进行重置后,Visual Studio 2012自动从web.config中删除了一些旧设置,然后应用程序又恢复正常运行。 - humbads
遇到了类似的问题,我认为某些框架版本只是不将 System.Linq 视为有效的库。 - Callat
那真是一种魔力。就像我的新手机荣耀8X,有时更改设置不会立即生效。为了使其正常工作,我必须多次来回切换。 - Harish Ninge Gowda
在MVC Web应用程序中不要这样做!当您尝试运行解决方案时,它会导致一个错误页面,显示“编译器失败,错误代码为-532462766”。 - Matt Arnold
显示剩余2条评论

39

我发现这是由于我的命名空间名称与类名相同 (MyWorld.MyWorld = Namespace.ClassName)。

将您的命名空间更改为不与您的类名相同的名称,就可以编译此代码了。

来源


8
只需在“Windows.Whatever”前面加上“global::”即可解决此问题。 - joshcomley

22

当我尝试使用LINQ to SQL时,在一个ASP.NET MVC站点上遇到了同样的问题。我通过以下方式解决了问题:

解决方案资源管理器 -> 引用 -> 右键单击System.Data.Linq -> 复制本地(True)


1
对我来说,我不需要设置Copy Local -> True,而是Specific Version -> False。这样就解决了问题。 - order

16

我经历过与System.Data.SQLite相同的问题。问题的源头是你所使用的dll应该与你的项目具有相同的.NET版本。

例如,如果你使用的是(在我这个案例中)SQLite for .NET 4.5,则你的平台目标也应该是.NET 4.5。

你可以通过以下方式找到平台目标:项目 > (项目名称)属性 > 构建。


15

检查您的目标框架是否具有相同的.NET版本。我遇到了相同的问题,我的类.NET版本为3.5,而Web解决方案使用了4.5版本。我将它们同步后,问题得到了解决 :)


24
这只是重复了之前几个月发布的先前答案中已经提出并解释过的观点。 - gnat

14

我曾经有过同样的问题,尝试了上述所有方法都没有成功,后来我发现了问题所在:

我在我的一个项目中创建了一个名为“System”的文件夹,然后在其中创建了一个类。问题似乎源自创建.cs文件时具有名称空间“System”,即使它在“MyProject.System”命名空间中。

回想起来,我可以理解为什么会引起问题。一开始错误消息看起来并不与这个问题有关,这让我非常困惑。


1
我也遇到了这个问题,供参考。如果工具中有更详细的错误信息会更好,但没关系。 - Nick
4
我在MSDN上发布了一些内容,但微软表示这不是一个漏洞。我不想争论这个问题,但我希望他们能理解它可能会引起的问题。 - GrandMasterFlush
1
我试图为类和命名空间使用相同的名称。 至少,这会令人困惑,并且可能导致错误。 - JosephDoggie

8
在我的情况下,问题出现是因为我创建的类有一个命名空间与现有类相冲突。新类A的命名空间是zz.yy.xx(错误)。在类A或其他命名空间为zz的类中编译对另一个命名空间yy.xx中对象的引用时会出错。
我将类A的命名空间更改为yy.xx(本应如此),然后它开始工作了。

6

对于任何与链接文件有关的问题:我曾遇到过这个问题,当时我使用了Silverlight,并且那个引起错误的文件是一个链接文件。

编译器报错告诉我错误发生在包含该文件的项目中。实际上,错误不在那个项目中,而是在包含链接文件的项目中发生的。该项目缺少了一个引用。


我在使用Visual Studio 2013在Windows 10上测试.NET 4项目时,遇到了System.Management.Automation的问题。将项目升级到.NET 4.5.1后问题得到解决。 - Malcolm McCaffery

3
我在使用Visual Studio的Git集成管理项目时遇到了这个问题。由于某种原因,当将Windows Phone 8项目设置为目标ARM时,它会编译失败,并显示一个错误,指示“广告”不存在于Microsoft命名空间中。最终,我通过删除Microsoft.Advertising.*.dll引用并重新添加来解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接