C#:找不到系统库

时间:2015-05-29 14:20:04

标签: c#

我刚刚查看了我的注册表,发现我正在运行.NET 4.5.1版本,因此我可以使用我想要的库。

我尝试包含命名空间:

using System.IO.MemoryStream;
using System.Media.SoundPlayer;

然而,VS抱怨名称空间不存在。

MemoryStreamSoundPlayer的参考页面要求在我的.NET版本中提供这些参考页面。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

只使用命名空间

using System.IO;
using System.Media;

答案 1 :(得分:2)

您使用using语句混淆了类名和命名空间以及using指令。

System.IO是一个命名空间。它是一个分组构造,用于逻辑地将类和结构组合在一起并避免名称冲突。 System.IO.MemoryStreamSystem.IO命名空间内的一个类。

如果您想使用MemoryStream,您可以:

var ms = new System.IO.MemoryStream(...);

或者,为了避免始终指定命名空间(完全限定名称)的详细程度,您可以使用using指令:

using System.IO;

然后你可以使用类名:

var ms = new MemoryStream(...);

您可以将using指令视为告诉编译器在查找类时要使用的搜索路径。如果你要求MemoryStream它将首先在当前命名空间中查找名为MemoryStream的类,如果它找不到,那么它将查找已导入的所有命名空间using指令(在VB.NET中,我相信等效指令实际上被称为Imports,可以说,它更有意义,但你去了)。如果它仍然没有找到MemoryStream类,您将收到编译时错误。

注意:如果它找到多个MemoryStream,你也会得到一个编译时错误,因为它不会在第一个停止 - 你的类需要明确无误。这不是在每个using文件的顶部填充大量不需要的.cs指令的原因。 MemoryStream在这里不是特别的问题(我认为它是BCL中唯一的MemoryStream),但System.IO中的另一个类是Path。 BCL中有几个名为Path的类(System.Windows.Shapes下有另一个类),如果没有命名空间,它们将成为一个噩梦。

现在,您的混淆可能来自using语句,该语句通常用于实现IDisposable的类以确保它们被处置。 MemoryStream实施IDisposable,因此您经常会看到以下内容:

using (var ms = new MemoryStream(...))
{
   // some code here
}

或者,如果他们没有使用using 指令来声明命名空间:

using (var ms = new System.IO.MemoryStream(...))
{
    // some code here.
}

这看起来很像您尝试使用using指令。

查看MSDN中的课程时,您需要注意两件重要事项:

  

命名空间:System.IO

     

程序集:mscorlib(在mscorlib.dll中)     System.IO(在System.IO.dll中)

命名空间告诉您需要包含在using指令中或作为完全限定类名的一部分才能使用该类。 程序集部分告诉您需要添加对项目的引用的程序集,以便能够使用这些类。在这种情况下,MemoryStream是核心库的一部分,因此您不可能引用所需的程序集。

答案 2 :(得分:0)

使用System是正确的做法,因为MemoryStream本身就是类。 右键单击项目 - >添加引用 - >装配 - >系统

使用System.IO

然后在代码中你可以创建MemoryStream的对象。

答案 3 :(得分:0)

我想我还要补充一点,关于using指令的格式。 可以使用using指令,就像创建命名空间或类的别名一样。

例如,为这样的类创建一个别名:

using SP = System.Media.SoundPlayer;

允许您这样做:

var sp = new SP();