提问人:Greg 提问时间:7/22/2010 最后编辑:TylerHGreg 更新时间:7/5/2023 访问量:512492
如何修复 Visual Studio 中的“找不到类型或命名空间名称”错误?
How do I fix a "type or namespace name could not be found" error in Visual Studio?
问:
我得到一个:
找不到类型或命名空间名称
VS2010 中 C# WPF 应用的错误。这个代码区域编译得很好,但突然我收到这个错误。我尝试删除项目引用和语句,关闭VS2010并重新启动,但仍然有这个问题。using
任何想法为什么会发生这种情况,似乎我正在做正确的事情 参考和声明?using
我还在 VS2010 中注意到该命名空间的智能感知工作正常,所以看起来 VS2010 有项目引用并且一方面看到了命名空间,但在编译过程中没有看到它?
答:
首先,我会验证您的项目生成的信息是否未损坏。对解决方案进行清理并重新生成。
如果这没有帮助,我过去看到的一件事是设计器问题的工作是打开一个 Windows 窗体项目,然后再次关闭它。不过,这有点像鸡内脏,所以不要屏住呼吸。
评论
您也可以尝试删除您认为有问题的代码,并查看它是否在没有引用该代码的情况下编译。如果没有,请修复问题,直到它再次编译,然后重新处理可疑的问题代码。有时,当编译器不喜欢其他东西时,我会遇到关于类或方法的奇怪错误,我知道这些错误是正确的。一旦我修复了它真正挂断的东西,这些“幻影”错误就会消失。
这可能是两个项目之间的 .NET Framework 版本不兼容的结果。
它可以通过两种方式发生:
- 引用完整框架项目的客户配置文件项目;或
- 面向较新框架版本的旧框架版本
例如,当应用程序设置为面向 .NET 4 Client Profile 框架,并且它引用的项目面向完整的 .NET 4 Framework 时,就会发生这种情况。
因此,为了更清楚地说明这一点:
- 项目 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 的新项目,然后从新项目中引用那些旧项目)
评论
我们有一个奇怪的案例,我刚刚在一个解决方案中修复了它。在主项目中,“using”语句前面有一个隐藏/空格字符。该项目可以正常构建,网站也可以正常运行,但无法构建引用它的单元测试项目。
在定义类名的类中,例如:Public class ABC,删除一个字符并稍等片刻。
您的错误列表将增加,因为您更改了名称。现在放回您键入的字符。
就我而言,问题是在将命名空间更改为与另一个项目中的命名空间完全相同(故意)之后,VS 也更改了程序集的名称,因此有两个具有相同名称的程序集,一个覆盖另一个
评论
我的问题是我在 C++ 做事的方式中添加了依赖项。
转到不会生成的项目,在“解决方案资源管理器”中打开“引用”文件夹,然后查看是否列出了依赖项。
如果没有,您可以“添加引用”并在“项目”选项卡上选择依赖关系。
在构建解决方案时,我遇到了同样的错误(找不到类型或命名空间'')。在它下面,我看到一条警告,指出“无法解析引用”,并确保“程序集存在于磁盘上”。
我非常困惑,因为我的DLL非常清楚地位于引用所指向的位置。VS 似乎没有突出显示任何错误,直到我尝试构建解决方案。
我终于意识到了问题所在(或者至少我怀疑是问题所在)。我正在同一个解决方案中构建库文件。因此,即使它存在于磁盘上,它也在该位置重建(不知何故,在重建库的过程中,我的另一个项目 - 在同一个解决方案中 - 引用该库必须决定该库不存在)
当我右键单击项目并仅构建该项目而不是整个解决方案时,我没有收到错误。
为了解决这个问题,我将库作为依赖项添加到使用它的项目中。
为此,请执行以下操作:
- 我在“解决方案资源管理器”中右键单击我的“解决方案”,然后选择 “属性”
- 然后在“通用属性”中,我选择了“项目依赖项”。
- 然后在“项目”下拉菜单中,我选择了 依赖于图书馆,以及
- 选中了“取决于”下找到的库旁边的框
这样可以确保首先生成库项目。
评论
我在将现有项目从 VS2008 升级到 VS2012 时遇到了这个问题。我发现两个项目(我创建的仅有的两个项目)面向不同的 .Net 框架(3.5 和 4.0)。我在项目的“应用程序”选项卡上解决了这个问题,确保两个项目在“目标框架”框中都有“.NET Framework 4”。
我遇到的一个更棘手的情况是:
项目 1 面向安装了包的 4.0 完整框架。
项目 2 面向 4.0 完整框架,但在引用项目 1 类时不会编译。Microsoft.Bcl.Async
在第二个项目上安装异步 NuGet 包后,它编译良好。
评论
我知道这是在踢一匹死马,但我有这个错误,框架很好。我的问题基本上是说找不到接口,但它构建和访问得很好。所以我开始思考:“当其他人工作正常时,为什么只有这个界面?
最后,我实际上是在使用 WCF 访问一个服务,其终结点的接口使用实体版本 6,而其余项目使用的是版本 5。我没有使用 NuGet,而是简单地将 nuget 包复制到本地存储库以供重复使用,并以不同的方式列出它们。
例如,EntityFramework6.dll 与 EntityFramework.dll。
然后我添加了对客户端项目的引用,然后噗,我的错误消失了。我意识到这是一个极端情况,因为大多数人不会混合使用实体框架的版本。
重新安装 NuGet 包对我来说很成功。在我将 .NET Framework 版本更改为与所有项目同步后,某些 NuGet 包(尤其是 Entity Framework)仍为以前的版本安装。包管理器控制台中的此命令为整个解决方案重新安装包:
Update-Package –reinstall
评论
Update-Package -reinstall
就我而言,我有一个由外部依赖项(xsd2code)构建的文件,但不知何故,VS 未正确处理其设计器 .cs 文件。在 Visual Studio 中创建一个新文件并将代码粘贴到其中对我来说就成功了。
将我的解决方案添加到组合中,因为它有点不同,我花了一段时间才弄清楚。
就我而言,我向一个项目添加了一个新类,但由于未设置版本控制绑定,我需要使文件在 Visual Studio 外部可写(通过 VC)。我已经取消了 Visual Studio 中的保存,但是在 VS 外部使文件可写后,我再次在 VS 中点击全部保存。这无意中导致新的类文件未保存在项目中。然而。。Intellisense 仍然在引用项目中将其显示为蓝色且有效,即使当我尝试重新编译文件时未找到文件并出现未找到类型错误。关闭和打开 Visual Studio 仍然显示问题(但如果我注意到重新打开时类文件丢失)。
一旦我意识到这一点,修复就很简单:将项目文件设置为可写,将丢失的文件重新添加到项目中。现在一切都很好。
对于在尝试将网站发布到 Azure 时遇到此错误的任何人来说,上面看起来很有前途的解决方案都没有帮助我。我在同一条船上 - 我的解决方案本身就很好。我最终不得不
- 删除解决方案中的所有 nuget 包。
- 关闭并重新打开我的解决方案。
- 重新添加所有 nuget 包。
有点痛苦,但这是我可以将我的网站发布到 Azure 的唯一方法。
我有同样的问题。一天晚上,我的项目会在第二天早上编译 ERRORS!。
我最终发现 Visual Studio 决定“调整”我的一些引用并将它们指向其他地方。例如:
System.ComponentModel.ISupportInitialize 不知何故变成了“等等。System.ComponentModel.ISupportInitialize”
如果你像我一样,这是一件很粗鲁的事情
就我而言,我发现 VisualStudio 中的引用有一个三角形和一个感叹号,如此图像所示,
然后,我右键单击删除它,并再次正确添加dll引用,问题就解决了。
我不知道为什么会这样,但我删除了 VS2015 告诉我它找不到的项目引用,然后再次添加它。解决了问题。我尝试过清理、构建和重新启动 VS,但无济于事。
评论
Test
我遇到了类似的问题:编译器无法检测到同一项目中的文件夹,因此链接到该文件夹的 using 指令生成了错误。就我而言,问题源于重命名文件夹。即使我更新了该文件夹中所有类的命名空间,项目信息也不知何故无法更新。我尝试了一切:删除 .suo 文件以及 bin 和 obj 文件夹、清理解决方案、重新加载项目 - 没有任何帮助。我通过删除文件夹和里面的类,创建一个新文件夹并在该新文件夹中创建新类来解决这个问题(简单地将类移动到新文件夹中无济于事)。
PS:就我而言,我正在开发一个Web应用程序,但是此问题可能会发生在不同类型的项目中。
有同样的错误,我的故事如下:
错误合并后(通过 Git),我的一个 .csproj 文件有重复的条目,例如:compile
<Compile Include="Clients\Tree.cs" />
<Compile Include="Clients\Car.cs" />
<Compile Include="Clients\Tree.cs" /> //it's a duplicate
如果您有一个大型解决方案,并且错误窗口中有 300 多条消息,则很难检测到此问题。 所以我通过记事本打开了损坏的.csproj文件并删除了重复的条目。在我的情况下工作。
评论
它甚至发生在 Visual Studio 2017 中。
- 重启 Visual Studio
- 清理无法生成的项目。
- 重新生成项目。
我的情况与这里讨论的情况相同,但在我从参考文献列表中删除引用之前,没有任何解决方法(没有它一切都很好)System.Core
我遇到了与讨论相同的问题:VS 2017 将引用项目中的类强调为错误,但解决方案构建正常,甚至智能感知也能正常工作。
以下是我设法解决此问题的方法:
- 卸载引用的项目
- 在 VS 中打开 .proj 文件(我正在寻找有人建议的重复项)
- 再次重新加载项目(我没有更改甚至保存项目文件,因为我没有任何重复项)
若要解决此问题,还可以帮助删除并重新创建关联解决方案的文件。*.sln.DotSettings
就我而言,我有一个类列在正确的源文件夹中,但未在解决方案资源管理器中注册。我必须右键单击项目>添加现有项,然后手动选择它说缺少的类。然后一切正常!
好的,多年后使用 VS 2017 .NET Core 2.2 Razor Pages,我觉得这个答案可能会对某人有所帮助。 如果它是一条蛇,它会咬我。 我到处乱扔东西,更改名称,重命名模型,突然间我收到了这个错误:
错误 CS0246 类型或命名空间名称“UploadFileModel”不能是 找到(是否缺少 using 指令或程序集引用?
这在我的 .chstml Razor 页面中以红色下划线标出。(修复后不带下划线):
@page
@model UploadFileModel
所以,最后,幸运的是,我从其他人那里找到了我最初使用的代码,低矮的,瞧,命名空间不包含 .cshtml 文件名!!
这是我的坏假错误,用命名空间中的页面名称打屁股:
namespace OESAC.Pages.UploadFile
{
public class UploadFileModel : PageModel
{
我的原始代码所具有的,我所要做的就是从命名空间中删除页面名称 UploadFile:
namespace OESAC.Pages
{
public class UploadFileModel : PageModel
{
低头看,所有的错误都消失了!! 傻傻的我。但是你知道,MS 让这些 .NET C# MVC 的东西让我们这些非计算机科学家感到非常困惑。我经常被鞋带绊倒,试图找出模型名称、页面名称和语法来使用它们。不应该这么难。那好吧。我希望错误和解决方案对某人有所帮助。错误是对的,没有名为“UploadFileModel”的命名空间哈哈。
我知道它很旧,但我发现了同样的问题。我的项目确实生成了,然后我将 Visual Studio 更新到最新版本,并且项目无法生成,因为它无法从单独的程序集中找到类型定义。另一个程序集构建正常,主项目正确引用了它,并且自构建正常以来没有任何变化。
我清理了整个解决方案并重建了它,它失败了。我自己构建了组件,它构建正常。项目没有建成。我清理和建造了多次,但都失败了。然后我打电话给一个同事看它,当我在他旁边建造时,一切都很好。
我认为 Visual Studio 工具是问题所在,尤其是在我刚刚更新它时。
将一些新代码合并到 vs2019 项目中后遇到了同样的问题。
重新启动 VS,卸载并重新加载项目,确保解决方案中的所有项目都具有相同的 .这些都无济于事。ToolsVersion=
TargetFrameworkVersion
我有一个项目 Substrate 的案例,找不到命名空间 Skin(在项目 Skin 中)。
最后,我打开了 Substrate.csproj 并检查了所有条目。其他人在那里,但没有引用 Skin,即使 Skin 确实出现在小项目依赖项对话框的复选框中。因此,项目依赖项对话框选中了 Skin 的复选框(并将其保存在某处),但未更改 Substrate.csproj。然后,我手动添加了 ,确保我具有外观项目的正确路径和 GUID。ProjectReference Include
ProjectReference Include
<ProjectReference Include="..\Skin\Skin.csproj"> <Project>{1ad4b5d7-5014-4f5f-983e-2c59ac0e0028}</Project> <Name>Skin</Name> </ProjectReference>
然后我保存了 Substrate.csproj,问题就解决了。因此,正如其他人所说,这是 VS 工具的问题
检查包含缺失类型的文件的生成操作。确保它是 C# 编译器。.cs
- 单击包含缺失类型的文件。
.cs
- 按下可调出属性。F4
- 确保“生成操作”设置为“C# 编译器”。
以前:
后:
就我而言,我卸载项目,然后:
打开并更新到(我正在使用 vs 2017)(使用 Paulus 的答案 https://stackoverflow.com/a/64552201/1594487)。
myProject.csproj
ToolsVersion="4.0"
ToolsVersion="12.0"
从以下行中删除了:
myProject.csproj
<Import Project="..\packages\EntityFramework.6.4.0\build\EntityFramework.props" Condition="Exists('..\packages\EntityFramework.6.4.0\build\EntityFramework.props')" /> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
问题解决了。
评论
<Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
评论