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

时间:2010-07-21 23:42:54

标签: c# visual-studio-2010 namespaces reference directive

我得到了:

  找不到

类型或命名空间名称

VS2010中的C#WPF应用程序出现

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

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

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

41 个答案:

答案 0 :(得分:416)

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

可以通过两种方式实现:

  1. 引用完整框架项目的客户端配置文件项目;或
  2. 针对较新框架版本的较旧框架版本
  3. 例如,当应用程序设置为以.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的新项目,然后您参考新项目中的那些旧项目)

答案 1 :(得分:34)

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

// MemberModel class
public string Title {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
public Address Address{get;set;}
public string TempCardNumber {get;set;}
public string Email {get;set;}

// Address POCO 
public string AddressLine1 {get;set;}
public string AddressLine2 {get;set;}
public string AddressLine3 {get;set;}
public string AddressLine4 {get;set;}
public string TownCity {get;set;}
public string County {get;set;}
public string Postcode {get;set;}
public string PhoneNumber {get;set;}

答案 2 :(得分:27)

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

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

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

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

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

要做到这一点:

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

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

答案 3 :(得分:21)

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

答案 4 :(得分:6)

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

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

答案 5 :(得分:5)

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

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

答案 6 :(得分:4)

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

答案 7 :(得分:3)

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

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

答案 8 :(得分:2)

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

答案 9 :(得分:2)

在我的情况下,我发现VisualStudio中的引用有一个三角形,并有一个感叹号作为此图像,

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

答案 10 :(得分:2)

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

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

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

答案 11 :(得分:2)

[Facepalm]我的问题是我已经用C ++的方式添加了依赖。

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

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

Boom Shankar。

答案 12 :(得分:2)

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

答案 13 :(得分:1)

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

答案 14 :(得分:1)

我知道它的存在,但是我发现了同样的问题。我的项目确实建立了,然后我将Visual Studio更新到了最新版本,由于无法从单独的程序集中找到类型定义,因此该项目也无法建立。另一个程序集建立良好,主项目正确地引用了它,并且自从建立好之后就没有任何更改。

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

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

答案 15 :(得分:1)

该事件发生在Visual Studio 2017中。

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

答案 16 :(得分: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文件并删除了重复的条目。在我的案例中工作。

答案 17 :(得分:1)

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

答案 18 :(得分:1)

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

答案 19 :(得分:1)

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

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

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

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

答案 20 :(得分:1)

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

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

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

答案 21 :(得分:1)

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

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

e.g。 EntityFramework6.dll EntityFramework.dll

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

答案 22 :(得分:1)

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

答案 23 :(得分:0)

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

  1. 单击包含丢失类型的.cs文件。
  2. F4 弹出属性
  3. 确保将构建操作设置为 C#编译器

之前:

The properties of a C# file whose build action is set to "None"

之后:

The properties of a C# file whose build action is set to "C# compiler"

答案 24 :(得分:0)

我因“使用系统”而收到此错误;将新的库项目添加到我的VS2019解决方案后。将包Newtonsoft.Json(currentversion)添加到库项目中解决了该问题,因为Newtonsoft.Json的依赖项包括库的Dependencies下的NETStandard.Library,并且正在生成警告图标。在我安装Newtonsoft.Json之前,主项目有一个错误,因此我认为它也适用于Library。而且确实如此。

答案 25 :(得分:0)

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

我遇到了一个Substrate项目,但找不到(在项目Skin中)命名空间Skin。

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

<ProjectReference Include="..\Skin\Skin.csproj">
  <Project>{1ad4b5d7-5014-4f5f-983e-2c59ac0e0028}</Project>
  <Name>Skin</Name>
</ProjectReference>

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

答案 26 :(得分:0)

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

  1. 打开 myProject.csproj 并将 ToolsVersion="4.0" 更新为 ToolsVersion="12.0"(我使用的是 2017 年)(使用 Paulus 的答案 https://stackoverflow.com/a/64552201/1594487) .

  2. 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')" />
    

问题解决了。

答案 27 :(得分:0)

为此苦了一段时间,而不是第一次。在过去的时间里,通常是配置不匹配,但这次不是。

这一次证明是在我的应用程序中将“自动生成的绑定重定向”设置为true

实际上,如果我在我的库中将其设置为true,则我的库会收到针对Microsoft.Reporting命名空间中的类型的错误,并且如果我在我的应用程序中将其设置为true ,然后我的应用程序会从我的库中收到有关类型的错误。

此外,对于我的库,该值似乎默认为false,对于我的应用程序,该值默认为true。因此,如果我未指定任何一个,则我的库构建良好,但是我的应用程序收到了我的库错误。因此,我必须在应用程序中将其专门设置为false,否则我将收到此错误,而没有任何指示。

我还发现,如果项目不使用sdk csproj,则无论设置如何,都会得到此消息 。一旦我转换为sdk csproj,设置就会有所不同。

另外,就我而言,这一切似乎都与我的根库中的Microsoft.ReportingServices.ReportViewerControl.Winforms nuget包有关。

答案 28 :(得分:0)

从VS 2019 Enterprise“降级”到VS 2019 Professional之后,开始出现此问题。 尽管错误显示在“错误”窗口中,但是我可以毫无问题地构建项目。 尝试了该线程的许多解决方案以及诸如均衡目标框架,删除并再次进行引用,删除.suo文件等其他解决方案。 对我有用的只是删除本地存储库中的项目,然后从远程存储库中再次克隆它。

答案 29 :(得分:0)

好吧,几年后使用VS 2017 .NET Core 2.2 Razor Pages,我觉得这个答案可能会对某人有所帮助。 如果是蛇,那会咬我。 我到处乱扔东西,更改名称,重命名模型,突然间我收到此错误:

  

错误CS0246类型或名称空间名称'UploadFileModel'不能为   找到(您是否缺少using指令或程序集引用?)

在我的.chstml剃须刀页面上用红色下划线标出。 (修复后未加下划线):

@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”的命名空间哈哈。

答案 30 :(得分:0)

我在项目资源管理器中打开了项目下方的引用,将鼠标悬停在缺失的引用之一上,很快,它找到了所有内容。然后我就可以成功构建了。

运行 Visual Studio Community 2019,版本 16.8.4

答案 31 :(得分:0)

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

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

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

enter image description here

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

enter image description here

答案 32 :(得分:0)

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

答案 33 :(得分:0)

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

请帮助:)

答案 34 :(得分:0)

在我的情况下,添加dll作为参考会导致type or namespace name could not be found错误。但是,直接在bin文件夹中复制和粘贴dll文件可以解决错误。

不知道为什么会这样。

答案 35 :(得分:0)

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

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

答案 36 :(得分: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复制到那里。

答案 37 :(得分:0)

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

enter image description here

答案 38 :(得分:0)

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

  1. 删除我的解决方案中的所有nuget包。
  2. 关闭并重新打开我的解决方案。
  3. 重新添加所有nuget包。
  4. 有点痛苦但是我能让我的网站发布到Azure的唯一方法。

答案 39 :(得分:0)

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

答案 40 :(得分:-3)

从GAC中删除程序集(C:\ WINDOWS \ assembly文件夹 - 选择您的组合并右键单击并卸载)。因为解决方案使用guid保持引用,如果该引导在GAC中,它将继续采用GAC版本进行编译。