C# 类型或命名空间<;诸如此类;不存在

C# 类型或命名空间<;诸如此类;不存在,c#,compiler-errors,C#,Compiler Errors,好的,这个问题我已经回答过一百万次了,之前已经回答过一百万次了 然而,再一次。我有3个项目,A、B和C,每个项目都有一个DLL。每个项目都是.NET4.0(不是客户端版本,完全是4.0)。项目C引用A和B。它们被引用为项目,并且输出设置为本地复制 在C中,我的.cs文件中有两个using语句: using A; using B; 当我编译时,我收到的投诉是找不到B。A是好的。B取决于A 我该怎么办?我删除并重新添加,关闭VS2010,重新打开它,查看.csproj文件。我就是搞不懂。再一次,第

好的,这个问题我已经回答过一百万次了,之前已经回答过一百万次了

然而,再一次。我有3个项目,A、B和C,每个项目都有一个DLL。每个项目都是.NET4.0(不是客户端版本,完全是4.0)。项目C引用A和B。它们被引用为项目,并且输出设置为本地复制

在C中,我的.cs文件中有两个using语句:

using A;
using B;
当我编译时,我收到的投诉是找不到B。A是好的。B取决于A

我该怎么办?我删除并重新添加,关闭VS2010,重新打开它,查看.csproj文件。我就是搞不懂。再一次,第一百万次

有人请给我足够的感觉,让我一劳永逸地了解这一切的来源

是的,这可能在StackOverflow中的某个地方得到了回答,但在我迄今为止检查过的所有最重要的答案中都没有。这些术语太笼统了,无法使用,太多的问题的答案是“duh,添加一个参考”。我已经过了那一关

以下是我得到的错误。有三种,但从过去的经验来看,最后一种才是真正的

Error   130 'AWI.WWG.EXPMRI.MriUpload.Data.MriUpload' does not contain a definition for 'Database' and no extension method 'Database' accepting a first argument of type 'AWI.WWG.EXPMRI.MriUpload.Data.MriUpload' could be found (are you missing a using directive or an assembly reference?) 

Error   114 'object' does not contain a definition for <blah>

Error   59  The type or namespace name '<blah>' could not be found (are you missing a using directive or an assembly reference?)    
在本例中,该.csproj文件是“B”。即使我删除并重新添加了项目引用,我还是得到了这个结果。但感觉我越来越近了

嗯,我刚刚找到另一个DLL,称之为“D”,它是“A”引用的。当我将其添加到项目中时,我开始收到投诉:

----------------
The  Add Reference Dialog could not be shown due to the error:

The specified path, file name, or both are too long.  The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
----------------
这可能是相关的,或者只是另一种干扰


好的,我发现了问题,尽管我不明白

当我通过IDE添加引用时,它会将其添加到csproj文件“C”:


这不会编译,它会警告找不到引用的项目,然后所有这些错误都会发生。但随后我将ProjectReference更改为以下内容:

<ProjectReference Include="C:\...\Partners.Connectors.Base.2010.csproj">


。。。而且效果很好。请注意,这两个路径都不接近256个字符。完全限定的只有135个字符。但也许IDE正在对路径进行一些愚蠢的修饰。

基本上,这听起来像是缺少了一个参考

我能想到的一些健康检查是:

  • 您确定生成错误的项目是C吗
  • 您确定在使用过程中没有在命名空间B中犯拼写错误吗
  • 在编译C之前,B中是否有编译错误?(这可能会导致编译器在B中找不到命名空间)
  • 您是否有任何其他编译错误或警告
  • 编辑


    另一个建议:B程序集中的类是否定义为
    public

    创建干净的项目并测试项目中使用的最小程序集集集。这样,您就可以确定解决方案中是否有不好的地方,或者新创建的项目是否有相同的症状。如果是这样的话,那么可能是VS、.net等被破坏了或是其他什么东西。

    我会确保您的项目包含了对程序集的引用

    我会检查构建顺序是否与您的依赖项匹配

    最后,如果一切设置正确,您应该看到以下构建顺序:

    看起来这不是您的问题,但为了完整性,我应该补充一点,检查另一件事(如果您的项目目标是.NET Framework 3.5或更高版本),即两个项目的目标框架是否匹配。如果您链接的对象是框架完整版本中的客户端配置文件,则还会出现“未找到”错误:


    解决方案与Windows中的文件路径限制有关,IDE将相对路径转换为完整路径,如中所述

    直接的解决方案是手动编辑csproj文件以使用绝对路径。在重新添加引用之前,绝对路径将有效。总有一天我会缩短我的文件夹,但这不是目前的首要任务

    如果怀疑存在此问题,请查看编译器发出的警告消息。我经常自己关掉这些,只看错误。但是关于“引用的项目不存在”的警告是为我解决这个问题的线索

    如果另一个链接消失,这里是指向MS文章的链接。


    值得注意的是,这个相同的错误表现为各种问题,例如客户端框架目标问题,并在引用加载失败时作为警告记录。参考错误可能只是一个警告,因为如果实际不需要参考,这并不重要。

    转到“警告”部分,解决所有警告,您就完成了


    警告部分将告诉您所引用的项目需要哪些内部DLL依赖项。

    我是在通过NuGet更新我们通常使用的项目时得到的。我想,如果我只是简单地将更新后的构建dll复制到packages文件夹中,我就可以在不必在我的机器上设置NuGet的情况下对其进行测试,但这并不是那么简单,因为我的应用程序仍在寻找旧的版本号。希望这对其他人有所帮助。

    我知道这并不是你问题的答案,但当你试图引用一个比你正在使用的.net版本更高的项目时,会出现类似的错误。IE:你不能从.NET3.5中引用.NET4.5的内容,我在试图解决另一个问题时突然出现了这个错误


    我通过转到Solution=>properties=>projectdependencies解决了这个问题,我得到的两个项目的名称空间错误导致所有依赖项都关闭。我选中了复选框并重新构建了解决方案,没有出现任何错误。

    我使用C#6.0中的
    全局::[namespace][type I want use]
    解决了这个问题。在VS2017中,当我卸载解决方案中的项目时,我遇到了这个问题。

    经过许多小时的挫折,我发现使用VS2017 so解决此问题的过程如下
    <ProjectReference Include="..\..\..\..\..\..\..\Partners\integration\framework\connectors\Partners.Connectors.Base\Partners.Connectors.Base\Partners.Connectors.Base.2010.csproj">
    
    <ProjectReference Include="C:\...\Partners.Connectors.Base.2010.csproj">
    
    Insure that all reference assemblies have been recognized and have current properties.
    
    If assemblies do not show proper reference, right click the entry
    and view properties.  This action often resets the reference. This
    action must be completed for each project in the solution.
    
    After resolving all references, if the error continues, delete the
    following:
    
            -The Obj folder
    
            -The Bin folder
    
            -Reference to the offending assembly
    
            -Clean and Rebuild the solution.  Errors should occur.
    
            -Re-reference the needed assembly.
    
    The editor should no longer show the namespace error and build should succeed.