2016-03-25 28 views
0

说我创建具有以下项目的Visual Studio解决方案:在我的电脑:(\ MYAPP C):覆盖已更改的DLL - 是否会导致DLL地狱?

'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 

我通过下面的文件复制到一个目录发布此

WindowsApplication1.exe 
ClassLibrary1.dll 
ClassLibrary2.dll 

现在,说我想做出改变将对ClassLibrary1.dll所以它包含以下内容:

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

我可以编译的解决方案,然后简单地覆盖C:\ MYAPP \柯乐sLibrary1.dll与新版本的ClassLibrary1.dll(从解决方案Release文件夹中复制)?我已经试过这个,它似乎工作。

+0

@Hans Passant,为什么要改变一个常量会导致问题? – w0051977

回答

2

确实只有当您更新由多个应用程序使用的DLL时才会调用DLL地狱。更新修复了一个应用程序中的错误,但又打破了另一个错误。不是你的场景。

尽管如此,还是有一些鬼鬼祟祟的方法可以让DLL更新出现,以修改另一个程序集中代码的行为。即使您从未更改过用于构建该程序集的源代码文件。邪恶的是一个公共常量和一个可选方法参数的默认值。自从编译到程序集后,未更新的程序集将继续使用原始值。这并不常见。

+0

谢谢+ 1。这是否适用于ASP.NET应用程序,即停止IIS服务器,然后替换BIN目录中的DLL,然后启动IIS? – w0051977