【问题标题】:Where is the reference to the "real" System assembly?对“真实”系统程序集的引用在哪里?
【发布时间】:2013-10-31 21:01:58
【问题描述】:

我正在研究我之前在 SO (System.Object not defined in VB.Net) 上看到的一个问题的答案,我发现了一些看起来很奇怪的东西。我一直认为,众所周知,位于“System”命名空间中的“Object”类是在 System.DLL 程序集中定义的,或者至少是在 System.Core.DLL 中定义的。然而,当我开始在对象浏览器中搜索时,我了解到对象实际上是在 mscorlib.dll 中定义的。然而,真正奇怪的是,这个程序集在任何项目的任何地方都没有被引用。为了测试这一点,我创建了一个项目并删除了所有引用:

令人惊讶的是(至少对我而言)这样做并没有破坏任何东西。我仍然可以这样写一段代码:

Module Module1
    Sub test()
        Dim x As New Object
    End Sub
End Module

没有任何编译错误。有人可以向我解释一下吗?

【问题讨论】:

    标签: .net


    【解决方案1】:

    c# 和 vb 编译器会自动包含它

    最初我说要看看C# compiler: /nostdlib option,但正如 cmets 所述,这个问题暗示了一些不正确的事情

    mscorlib 总是被引用,不可能不被引用,原因在 CLR 团队之一的帖子中说明了

    mscorlib.dll & System.dll

    他们的帖子很简单,可以理解,但总结一下 - CLR 和 mscorlib 绑定​​得太紧而无法分离。

    【讨论】:

    • 感谢您提供此信息。我愿意接受您的回答,但您链接到的帖子具有误导性。根据MSDN“/nostdlib”编译器选项“删除对 System.dll 的自动引用”。正如我在问题中所述,Object 类是在 mscorlib.dll 中定义的。在那个 MSDN 页面上,有一条注释说“总是引用 Mscorlib.dll 和 Microsoft.VisualBasic.dll 程序集。”,但我仍然想知道为什么。您能否更新您的答案,以便解释原因?
    • @roryap 好吧,这让我踏上了一段意想不到的旅程——不过很有趣!
    • 完美。这绝对很有趣,很高兴知道。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-02-09
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2019-04-06
    • 2010-11-11
    • 2021-04-03
    相关资源
    最近更新 更多