获取“找不到类型或名称空间名称”,但一切似乎还好吗?


276

我得到:

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

VS2010中的C#WPF应用出现错误。这部分代码编译良好,但是突然我收到了此错误。我试着删除项目参考和using语句,关闭VS2010并重新启动,但是仍然有这个问题。

任何想法为什么会发生这种情况,好像我在做正确的事情using

我还在VS2010中指出,该名称空间的intellisense可以正常工作,因此VS2010似乎具有项目参考并且一方面可以看到名称空间,但是在编译过程中没有看到它?


它可能可以关闭并重新启动Visual Studio。有时似乎会“卡住”
Ris Adams

2
指导:1)程序集已加载?,2)程序集已加载与原始程序集匹配?,3)“使用”指令指向旧的或无效的引用?,4).csproj清单包含源无效?,5)查找正则表达式的搜索工具在整个解决方案中(每个类库和项目)。5)检查项目设置中的net framework版本构建选项(团队合作出现这种问题,您必须双方都同意net framew。build版本)6)之后,清理并分别构建每个,最后包括所有参考到目标项目/类库。我应该工作!
菲利克斯·阿巴里

检查您是否已引用了dll。DLL位于解决方案目录的bin文件夹中。
阿布舍克·波加里

Answers:


470

这可能是两个项目之间.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
出色-可行-我必须升级WPF应用程序客户端才能使用完整的.NET Framework4。不确定是否会对客户端占用空间产生什么影响?我确实尝试将我具有的库降级为.Net 4客户端配置文件,但是当我这样做时,它与我刚开始使用的最新Quartz.net 3rd party库有类似的问题。因此,似乎在我的图书馆项目中使用Quartz.net最终迫使我不得不在UI WPF应用程序中使用完整的.Net 4框架。
格雷格,2010年

3
谢谢-刚才有帮助。我最近将解决方案从VS2010移到了VS2012,并在VS2012中创建了一个新的类库。突然我收到了这个错误,当然是因为新类库的目标是.NET 4.5,而引用它的项目却目标是.NET 4.0。将新库降级到目标4.0可以修复它。
理查德(Richard)

22
如果Visual Studio可以给您一些提示,那真是太好了!
杰森·科恩

3
尽管此答案很好地描述了需要做的事情……但没有建议如何做,这将是一个很好的补充
Jon Story

1
即使是我们最优秀的人,有时也从未需要执行某些任务。我不确定我永远不需要更改框架,尽管我现在已经找到了它,但是它以前从未发生过。这并不是解决问题的关键,只是我发现最好的答案是“描述问题,陈述解决方案,展示如何解决”的一站式服务
Jon Story

50

重新安装nuget软件包对我有用。在将所有项目的.NET Framework版本更改为同步之后,仍为先前版本安装了某些nuget程序包(尤其是Entity Framework)。Packages Manager控制台中的以下命令将重新安装整个解决方案的软件包:

Update-Package reinstall

我面临的问题是,我创建了一个新的解决方案,添加了与其他版本不同的Nuget软件包版本。然后,当我运行时,Update-Package -reinstall在所有解决方案中都遇到了几个错误,其中包括该程序包的另一个版本。我更新了所有内容,然后终于运行了。它还将package.json文件中的引用从45固定为452,因为我之前也更改了目标版本。
阿达姆·科瓦奇

为我工作,我不得不在降级时从引用中删除Sytems.Net.Http
Binil Anto

1
这也是对我有用的。执行命令,然后取消未完成的更改,我的sln恢复正常
foremaro

它的工作对我来说,它让我明白了wasnt我目前的框架支撑的参照
Adleri

这对我有用,消失的错误与安装的任何nuget软件包完全无关。
CAD小子

31

我不知道为什么这可行,但是我删除了VS2015告诉我找不到的项目参考,然后再次添加了它。解决了问题。我试过清理,构建和重新启动VS都无济于事。


在VS解决方案中发现任何引用问题时,强烈建议使用此技巧。在我添加了针对更高版本.NET框架的新项目后,它解决了VS2017中的问题。我敢打赌,有些缓存已清除。
themefield

1
同样在这里:这是有帮助的(我也没有其他版本问题)。对于打开的每个文件,我都会收到错误消息,最多可以显示400个以上的文件……尽管构建/运行不是问题。另外:ReSharper的解决方案范围分析也显示了相同的错误。
mike

这个技巧也帮了我。甚至没有任何目标版本差异。建造是可能的,Rider没有出现任何问题,但是VS坚持要求所有项目参考都丢失了……
Daniel Lerps

编译器会根据项目的生成顺序进行编译,因此,如果一个项目中存在真正的错误,则可能会因出现红色提示“找不到类型或名称空间”的错误而迷路-因为它只会在找到错误时退出错误,并且无法更新参考。如果没有列出太多错误,则应该能够找到真正的错误。不幸的是,对于我来说有一百个,所以这个技巧确实对我有所帮助。我想intelisense不在乎构建顺序,而只是单独编译项目,这就是为什么不会出现intelisense错误的原因。
凯夫

29

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

我很困惑,因为我的DLL很清楚在引用所指向的位置。在我尝试构建解决方案之前,VS似乎并没有突出显示任何错误。

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

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

为了解决此问题,我将库添加为对使用它的项目的依赖。

去做这个:

  1. 我在解决方案资源管理器中右键单击我的解决方案,然后选择“属性”
  2. 然后在“通用属性”中选择“项目依赖项”。
  3. 然后,在“项目”下拉菜单中,我选择了依赖库的项目,然后
  4. 选中“取决于”下的库旁边的框

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


2
感谢您提示查看警告。我的问题是我的测试项目需要为Bcl安装NuGet软件包,因为我的主项目正在引用它。

谢谢!这促使我找到我遇到的问题。原来,我对依赖项项目有两个引用,而优先级最高的一个是bin文件夹中以前构建的DLL。我删除了DLL和流氓引用,然后进行了重新构建,然后一切都正确编译了。
克里斯·戴维斯

7

首先,我将验证您的项目生成的信息没有损坏。进行清理并重建您的解决方案。

如果那没有帮助,我过去在设计人员问题上见过的一件事是打开Windows窗体项目,然后再次关闭它。但是,这有点像鸡的味道,所以请不要屏住呼吸。


我曾尝试清理并在您的解决方案上重建,但是没有运气。尝试仅删除/添加/清理/重建WPF应用程序项目,但仍然没有运气。:(
Greg

进行清理后再进行修复可以解决此问题。但是,此问题每天都会弹出。至少我可以把事情做好,直到完全解决为止。
瓦拉马斯2015年

5

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

在第二个项目上安装Async NuGet软件包后,它可以正常编译。


1
谢谢你 我的便携式项目在Xamarin Studio上编译正常,因此在Visual Studio上失败了。我认为XS会在缺少隐式引用时进行一些“魔术”操作以使其进行编译。
Nicola Iarocci 2014年

5

就我而言,我发现VisualStudio中的引用有一个三角形,并带有一个感叹号作为该图像,

然后,右键单击将其删除,然后再次正确添加dll引用,此问题已解决。


4

这个为我工作。在定义了班级名称的班级中,例如:公共班级ABC,删除一个字符,然后稍等。由于更改了名称,因此错误列表将增加。现在放回您键入的字符。这对我有用,希望对您也有用。祝好运!!!


4

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

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


3

[Facepalm]我的问题是我以C ++的处理方式添加了依赖性。

转到无法构建的项目,在解决方案资源管理器中打开“参考”文件夹,然后查看是否列出了您的依赖项。

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

繁荣香卡。


2

我有一个奇怪的情况,我只是解决了一个问题。在主项目中,“使用”语句前面有一个隐藏/空格字符。该项目可以正常运行,并且网站可以正常运行,但是无法构建引用该项目的单元测试项目。


2

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


2

遇到相同的错误,我的故事如下:在错误合并(通过git)之后,我的.csproj文件之一具有重复的compile条目,例如:

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

如果您有一个不错的解决方案,并且在错误窗口中收到了300多条消息,则很难检测到此问题。因此,我已经通过记事本打开了损坏的.csproj文件,并删除了重复的条目。就我而言。


1
我在VS 2019中合并不当也遇到了类似的问题。项目已成功编译,但未解决。该项目实际上存在错误(非常奇怪)。由于引用了以前已删除但又从合并中重新添加的额外文件,因此失败。我删除了该文件,清理了.csproj文件,对其进行了重新构建,所有引用再次开始工作。
Cryptc

2

我遇到了与上述问题相同的问题:VS 2017强调了所引用项目中的类为错误,但是该解决方案可以完成甚至是智能感知工作。

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

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

1

您还可以尝试消除您认为遇到问题的代码,并查看其是否编译时没有对该代码的引用。如果没有,请解决问题,直到再次编译,然后再处理您怀疑的问题代码。有时,当编译器不喜欢其他类或方法时,我会得到一些关于我所知道的正确类或方法的奇怪错误。一旦我修复了真正挂起来的东西,这些“幻像”错误就会消失。


1

我知道这是一匹致命的马,但是我有这个错误,而且框架还不错。我的问题基本上是说找不到接口,但是它可以很好地构建和访问。所以我开始思考:“当其他人工作正常时,为什么只使用这个界面呢?”

最后,我实际上是使用WCF通过端点接口的实体实体版本6访问服务,而其余项目使用的是版本5。不是使用NuGet,我只是将nuget包复制到本地存储库中以供重用和使用。列出了不同的名称。

例如EntityFramework6.dllEntityFramework.dll

然后,我将引用添加到客户端项目和poof中,我的错误消失了。我意识到这是一个极端的情况,因为大多数人不会混合使用Entity Framework的版本。


1

将我的解决方案添加到混合中,因为这有点不同,我花了一些时间才弄清楚。

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

一旦意识到这一点,修复就很简单:将项目文件设置为可写,然后将丢失的文件读取到项目中。现在一切都很好。


1

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

最终,我发现Visual Studio决定“调整”我的一些参考文献,并将其指向其他地方。例如:

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

如果像我一样,vs要做一件很粗鲁的事


1

它在Visual Studio 2017中发生。

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

1

我的案例与这里讨论的相同,但是直到我System.Core从参考文献列表中删除了参考文献之后,一切都没有解决(没有它,一切都很好)

希望它能对某人有所帮助,因为这个问题非常令人沮丧


这对我来说是确切的问题。我删除了System.Core并进行了重建,错误立即得以解决。感谢一百万为
我省


1

就我而言,我有一个在正确的源文件夹中列出的类,但是没有在解决方案资源管理器中注册。我必须右键单击项目>添加现有项,然后手动选择它丢失的类。然后一切正常!


1

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


在哪里可以编辑部件名称以将其更改为正确的名称?
Matt123

1
在项目文件(.csproj)中手动创建或通过右键单击项目->属性
user1121956

0

以我为例,我有一个由外部依赖项(xsd2code)构建的文件,由于某种原因,VS无法正确处理其designer.cs文件。在Visual Studio中创建一个新文件并将其粘贴到代码中对我来说很成功。


0

对于任何在尝试将其网站发布到Azure时遇到此错误的人,上面没有任何有希望的解决方案都没有帮助我。我在同一条船上-我的解决方案本身就很好。我最终不得不

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

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


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

就我而言,将dll作为参考添加 type or namespace name could not be found出现错误。但是,直接在bin文件夹中复制和粘贴dll文件解决了该错误。

不知道为什么这样做。


0

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

寻求帮助:)


0

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


0

我正在开发VS 2017社区版,并且CefSharp nuget包存在相同的问题。

软件包已成功下载和还原,项目可以成功构建和运行-仅标记表明无法识别名称空间。

我要做的就是打开该References部分,然后单击黄色的感叹号之一。

在此处输入图片说明

几秒钟后,标记错误消失了。

在此处输入图片说明


我想您会发现只有在“属性”面板打开的情况下,此方法才有效(右键单击有问题的引用并选择“属性”。)现在,任何人都可以解释为什么这可行吗?
Qwertie
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.