为什么intellisense使用Using指令但在指定命名空间内的类型时不能使用?

时间:2010-08-30 14:40:04

标签: c# .net visual-studio-2010

我可以使用intellisense将语句using System.Configuration;添加到我的代码中,但是当我访问类型ConfigurationManager时,我无法获得任何智能感知。

为什么intellisense在输入using指令时有效,但在从该命名空间指定类型时不起作用?

using System.Configuration;

namespace TestDBMSConnection
{
    class Program
    {
        static void Main(string[] args)
        {
            var dataProviderName = ConfigurationManager.AppSettings["provider"];
        }
    }
}

我可以通过添加对System.Configuration的引用来修复此问题,但我不明白为什么我不需要为intellisense执行此操作以使用using指令。

2 个答案:

答案 0 :(得分:3)

命名空间中的类不需要位于同一个程序集中。

System.Configuration命名空间中的某些类位于System.dll(例如SettingsBase)中,而其他一些类位于System.Configuration.dll中(例如ConfigurationManager)。

IntelliSense只能建议引用程序集中的类和名称空间。因此,如果您引用了System.dll但未引用System.Configuration.dll,则IntelliSense可以建议位于System.dll中的System.Configuration命名空间和System.Configuration类,但不能建议位于System.Configuration.dll中的那些。

IntelliSense也无法知道某个类可能位于哪个未引用的程序集中。因此,您必须先手动引用System.Configuration.dll,然后才能使用它。

答案 1 :(得分:2)

因为using的intellisense会显示已知命名空间的列表。并且已引用System.Configuration命名空间(此命名空间中的某些类位于system.dll或mscorlib.dll中),而ConfigurationManager类位于未引用的System.Configuration.dll中,并且因此intellisense不知道它。