覆盖已更改的DLL - 这会导致DLL Hell吗?

时间:2016-03-25 14:38:20

标签: .net vb.net

假设我使用以下项目创建Visual Studio解决方案:

'WindowsApp1
    Imports ClassLibrary1
    Imports ClassLibrary2    
    Public Class Form1
        Dim c1 As New ClassLibrary1.Class1
        Dim c2 As New ClassLibrary2.Class1

        Public Sub Form_load() Handles Me.Load
            MsgBox(c1.SayHello)
            MsgBox(c2.SayHello)
        End Sub
    End Class

    'ClassLibrary1
    Public Function SayHello()
        Return "Hello"
    End Function

    'ClassLibrary2
    Public Class Class1
        Public Function SayHello()
            Return "Good Afternoon!"
       End Function
    End Class

我通过将以下文件复制到我的PC上的目录(c:\ myapp)来发布:

WindowsApplication1.exe
ClassLibrary1.dll
ClassLibrary2.dll

现在,我想要对ClassLibrary1.dll进行更改,因此它包含以下内容:

'ClassLibrary1
        Public Function SayHello()
            Return "Good Morning"
        End Function

我可以编译解决方案,然后使用新版本的ClassLibrary1.dll(从解决方案发布文件夹中复制)覆盖c:\ myapp \ ClassLibrary1.dll吗?我试过这个似乎有效。

1 个答案:

答案 0 :(得分:2)

True DLL Hell仅在更新由多个应用程序使用的DLL时调用。更新修复了一个应用程序中的错误但又打破了另一个应用程序。不是你的情景。

但是,有一些偷偷摸摸的方式可以看到DLL更新可以修改另一个程序集中代码的行为。即使您从未更改用于构建该程序集的源代码文件。邪恶的是Public Const和Optional方法参数的默认值。未更新的程序集将继续使用原始值,因为它已编译到程序集中。这通常不太好。