ChatGPT解决这个技术问题 Extra ChatGPT

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

我得到一个:

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

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

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

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

关闭并重新启动 Visual Studio 可能会起作用。有时似乎会“卡住”
指导:1)程序集加载?,2)程序集加载与原始程序集匹配?,3)“使用”指令指向旧的或没有有效的引用?,4).csproj清单包括源无效?,5)寻找正则表达式的搜索工具在整个解决方案(每个类库和项目)中。 5)检查项目设置的网络框架版本构建选项(团队合作带来这种问题,你必须同意网络框架。双方构建版本)6)之后清理并分别构建每个,最后包含所有引用到目标项目/类库。我应该工作!
检查是否引用了 dll。 Dll 位于解决方案目录的 bin 文件夹内。
您是否更改了引用某些 nuget 包的项目的嵌套层次结构?试试这个解决方案 - Nuget Packages are there but missing References

s
slugster

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

它可以通过两种方式发生:

引用完整框架项目的客户资料项目;或针对较新框架版本的较旧框架版本

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

所以为了更清楚:

项目 A 以 Client Profile 框架为目标

项目 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 的新项目,然后您从新项目)


非常好 - 这很有效 - 我必须升级我的 WPF 应用程序客户端才能使用完整的 .NET Framework 4。不确定这会对客户端占用空间产生什么影响?我确实尝试将我必须的库降级到 .Net 4 客户端配置文件,但是当我这样做时,它与我刚开始使用的最近的 Quartz.net 3rd 方库有类似的问题。所以似乎在我的库项目中使用 Quartz.net 最终迫使我不得不在我的 UI WPF 应用程序中使用完整的 .Net 4 框架。
谢谢 - 这刚刚有帮助。我最近将解决方案从 VS2010 移到了 VS2012,并在 VS2012 中创建了一个新的类库。突然间我收到了这个错误,当然这是因为新的类库针对.NET 4.5,而引用它的项目针对.NET 4.0。将新库降级到目标 4.0 修复了它。
如果 Visual Studio 能给你一些提示,那就太好了!
虽然这个答案很好地描述了需要做什么......它没有关于如何做的建议,这将是一个很好的补充
即使是我们当中最优秀的人,有时也从来不需要做一些任务。我不确定我是如何从不需要更改框架的,虽然我现在找到了它,但我以前没有想到过。这不是答案的破坏者,只是我发现最好的答案可以作为“描述问题,陈述解决方案,展示如何解决它”的一站式商店
H
HaveNoDisplayName

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

Update-Package –reinstall

我面临的问题是我创建了一个新的解决方案,我添加了一个不同版本的 Nuget 包,而不是使用其他版本。然后,当我运行 Update-Package -reinstall 时,我在所有解决方案中都遇到了几个错误,其中包括这个包的不同版本。我全部更新然后它终于运行了。它还修复了 package.json 文件中的引用从 45 到 452,因为我之前也更改了目标版本。
为我工作,我不得不在降级时从参考中删除 Sytems.Net.Http
这也是对我有用的。运行命令,然后取消产生的挂起更改,我的 sln 恢复正常
它对我有用,它向我展示了我当前框架不支持的参考
这对我有用,并且消失的错误与安装的任何 nuget 包完全无关。
A
Alexander Høst

我不知道为什么会这样,但是我删除了 VS2015 告诉我它找不到的项目引用,并再次添加了它。解决了这个问题。我尝试过清理、构建和重新启动 VS 均无济于事。


每当在 VS 解决方案中发现任何引用问题时,强烈推荐此技巧。在我添加了一个针对更高版本的 .NET 框架的新项目后,它解决了我在 VS2017 中的问题。我敢打赌有一些缓存被清除了。
同样在这里:这是有帮助的(我也没有其他版本问题)。我收到每个打开的文件的错误消息,最多 400+ ......尽管构建/运行不是问题。另外:ReSharper 的解决方案范围分析也显示了相同的错误。
这个技巧也帮助了我。甚至没有任何目标版本差异。构建是可能的,Rider 没有表现出任何问题,但 VS 坚持认为所有项目引用都丢失了......
编译器根据项目构建顺序进行编译,因此如果一个项目中存在真正的错误,它可能会迷失在一大堆红鲱鱼“找不到类型或命名空间”错误中——因为它只是在找到错误,并且没有更新参考。如果没有列出太多错误,您应该能够找到真正的错误。不幸的是,我有 100 多个,所以这个技巧真的帮助了我。我猜 intelisense 不关心构建顺序,只是单独编译项目,这就是为什么你不会收到 intelisense 错误。
上面的建议在 VS2019 中帮助了我
G
Ganesh Kamath - 'Code Frenzy'

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

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

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

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

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

去做这个:

我在解决方案资源管理器中右键单击我的解决方案并选择“属性”然后在“通用属性”中选择“项目依赖项”。然后在 Projects 下拉菜单中,我选择了依赖于库的项目,并选中了“Depends On”下找到的库旁边的框

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


感谢您提供查看警告的提示。我的问题是我的测试项目需要为 Bcl 安装 NuGet 包,因为我的主项目正在引用它。
谢谢!这促使我找到了我遇到的问题。原来我有两个对依赖项目的引用,一个优先的是 bin 文件夹中先前构建的 DLL。我删除了 DLL 和恶意引用并进行了重建,然后一切都正确编译。
G
Greg D

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

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


我已经尝试清理并重建您的解决方案,但没有运气。尝试仅删除/添加/清理/重建 WPF 应用程序项目,但仍然没有运气。 :(
清洁后重建解决了该问题。然而,这个问题每天都会出现。至少我可以完成我的事情,直到我完全解决它。
K
Kim

我遇到的一个更棘手的情况是:项目一的目标是安装了 Microsoft.Bcl.Async 包的 4.0 完整框架。项目二以 4.0 完整框架为目标,但在引用项目一类时无法编译。

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


啊,谢谢。我的便携式项目在 Xamarin Studio 上编译得很好,而在 Visual Studio 上它会因此而失败。我认为 XS 做了一些“魔术”,让它在隐式引用丢失时编译。
y
yu yang Jian

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

https://i.stack.imgur.com/0EcW7.png

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


I
Ilia Anastassov

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

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


S
Sandeep Goundar

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


佚名

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

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

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

轰香卡。


E
Eric Eskildsen

检查包含缺失类型的 .cs 文件的 Build Action。确保它是 C# 编译器

单击包含缺失类型的 .cs 文件。按 F4 调出属性。确保 Build Action 设置为 C# 编译器。

前:

https://i.stack.imgur.com/1OBh8.png

后:

https://i.stack.imgur.com/4RPEb.png


这是我的问题;我在子文件夹层次结构中包含了从另一个项目复制过来的一堆文件,VS 将它们视为“内容”。
A
Andrey Kotov

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

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

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


我在 VS 2019 中遇到了类似的错误合并问题。项目编译成功,但不是解决方案。该项目实际上有一个错误(非常奇怪)。它失败是因为引用了一个先前已删除但随后从合并中重新添加的额外文件。我删除了该文件,清理了 .csproj 文件,重新构建,所有的引用又开始工作了。
M
Michael D.

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

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

卸载引用的项目 在 VS 中打开 .proj 文件(我正在寻找重复项,正如有人在此处建议的那样)再次重新加载项目(我没有更改甚至保存 proj 文件,因为我没有任何重复项)


J
Jalal

它甚至发生在 Visual Studio 2017 中。

重新启动无法生成的 Visual Studio Clean 项目。重建项目。


H
Henry Fieger

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


B
Bill

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


M
MPJ567

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


d
daveD

我知道它很旧,但我发现了同样的问题。我的项目确实构建了,然后我将 Visual Studio 更新到最新版本,并且该项目无法构建,因为它无法从单独的程序集中找到类型定义。另一个程序集构建正常,主项目正确引用了它,并且自构建正常以来没有任何变化。

我清理了整个解决方案并重建了它,但它失败了。我自己构建了程序集,它构建好了。该项目没有建立。我多次清洁和建造,但都失败了。然后我打电话给同事看,当我和他一起看时,一切都建好了。

我认为 Visual Studio 工具是问题所在,尤其是当我刚刚更新它时。


佚名

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


M
MickyD

我知道这是在踢死马,但我遇到了这个错误并且框架很好。我的问题基本上是说找不到接口,但它可以正常构建和访问。所以我开始思考:“为什么在其他人工作正常的情况下只有这个界面?”

最后,我实际上是使用 WCF 访问服务,其端点接口使用的是实体版本 6,而其余项目使用的是版本 5。我没有使用 NuGet,而是将 nuget 包复制到本地存储库以供重用和以不同的方式列出它们。

例如 EntityFramework6.dll 与 EntityFramework.dll。

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


N
Nick Gotch

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

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

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


u
user3784340

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

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

System.ComponentModel.ISupportInitialize 不知何故变成了“blahblah.System.ComponentModel.ISupportInitialize”

如果你和我一样,vs 这样做是一件很不礼貌的事情


y
yossico

我的情况与此处讨论的相同,但在我从引用列表中删除 System.Core 引用之前没有任何解决方案(没有它一切正常)

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


这对我来说是确切的问题。我删除了 System.Core 并重新构建,错误立即自行解决。感谢一百万为我节省了很多头痛
R
Robin Güldenpfennig

要解决此问题,还可以删除并重新创建关联解决方案的 *.sln.DotSettings 文件。


J
JustJohn

好的,多年后使用 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”的命名空间哈哈。


u
user1121956

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


我在哪里可以编辑程序集的名称以将其更改为正确的名称?
在项目文件 (.csproj) 中手动或右键单击项目 -> 属性
P
Paulus

将一些新代码合并到 vs2019 项目后遇到了同样的问题。重新启动 VS,卸载和重新加载项目,确保解决方案中的所有项目具有相同的 ToolsVersion=TargetFrameworkVersion。这些都没有帮助。

我有一个项目 Substrate 的案例,未能找到命名空间 Skin(在项目 Skin 中)。

最后我打开 Substrate.csproj 并检查了所有的 ProjectReference Include 条目。其他人都在那里,但没有提到皮肤,即使皮肤确实出现在小项目依赖关系对话框的复选框中。所以项目依赖对话框选择了 Skin 的复选框(并将其保存在某处),但没有改变 Substrate.csproj。然后我手动添加了 ProjectReference Include,确保我拥有皮肤项目的正确路径和 GUID。

{1ad4b5d7-5014-4f5f-983e-2c59ac0e0028} Skin

然后我保存了 Substrate.csproj,问题就解决了。所以正如其他人所说,这是VS工具的问题


M
Masoud

就我而言,我卸载项目,然后:

打开 myProject.csproj 并将 ToolsVersion="4.0" 更新为 ToolsVersion="12.0"(我正在使用 vs 2017)(使用 Paulus 的答案 https://stackoverflow.com/a/64552201/1594487)。从 myProject.csproj 中删除以下行:

问题解决了。


T
Tanuki

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


D
Dan

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

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

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