【问题标题】:Type or namespace could not be found, but it's there找不到类型或命名空间,但它在那里
【发布时间】:2014-04-24 12:44:01
【问题描述】:

我创建了一个 dll,其中包含一个带有公共方法的公共类。

我在新项目中添加了该 dll 作为参考,我正在尝试从 dll 的类中创建一个新对象

using myDll;

namespace foo
{
    class bar
    {
        static void Main(string[] args)
        {
            myDll.myClass test = new myDll.myClass();
            test.myVoidMethod();
            [...]

但是当我尝试使用 test 视觉工作室时说

The type or namespace name 'test' could not be found (are you missing a using directive or an assembly reference?)

这是范围问题吗?

mydll 代码(摘录):

using System;

namespace myDll
{

    public class myClass
    {
       public static void myVoidMethod()
       {
           Console.Write("Hello");
       }
    }
}

【问题讨论】:

  • 您对这个问题的答案可以在这篇文章中找到:stackoverflow.com/questions/6715612/…
  • 确保没有test 类或命名空间——这很可能会导致混淆(但可能不是错误的情况)。旁注:通常以大写命名的 C# 类/方法...
  • @Thomas:我添加了 dll 代码
  • @AlexeiLevenkov:没有冲突的命名空间/类/什么...(上面的代码只是我的情况的一个例子)
  • 那代码不可能是正确的 - 你在一个实例变量上调用一个静态方法。

标签: c# visual-studio-2012 namespaces scope


【解决方案1】:

问题:您不应该使用实例引用变量来访问static 方法。

解决方案:您应该使用classname 调用static 方法

试试这个:

myDll.myClass.myVoidMethod();

编辑:来自您的 cmets but i want to create a new object

您的错误不是来自您创建实例变量的第一行,而是来自使用实例变量调用static 方法时的第二条语句。

你仍然可以为你的类创建一个实例

试试这个:

myDll.myClass test = new myDll.myClass(); //it works
myDll.myClass.myVoidMethod();

【讨论】:

  • 您的错误不在创建实例变量时的第一行,而是在调用静态方法时的第二条语句中。单独试试这个myDll.myClass test = new myDll.myClass(); 它有效
  • +1。 @Doc - 你能解释一下新对象的创建与调用静态方法有什么关系吗?
  • @SudhakarTillapudi 静态关键字是问题所在,你是对的
【解决方案2】:

检查以确保您的项目未设置为使用 .NET Framework 4 客户端配置文件。 (正如下面的链接告诉我们的):Namespace not recognized (even though it is there)。这可能对您很有帮助。

【讨论】:

  • 到目前为止,您是否尝试过查看 StackOverflow 上的其他帖子?
  • 我总是先搜索再问... -.-
【解决方案3】:

您是否将属性Build Action 放在了类源文件的Compile 上?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2017-07-12
    • 2011-05-13
    • 2021-03-01
    相关资源
    最近更新 更多