假设我使用以下项目创建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吗?我试过这个似乎有效。
答案 0 :(得分:2)
True DLL Hell仅在更新由多个应用程序使用的DLL时调用。更新修复了一个应用程序中的错误但又打破了另一个应用程序。不是你的情景。
但是,有一些偷偷摸摸的方式可以看到DLL更新可以修改另一个程序集中代码的行为。即使您从未更改用于构建该程序集的源代码文件。邪恶的是Public Const和Optional方法参数的默认值。未更新的程序集将继续使用原始值,因为它已编译到程序集中。这通常不太好。