2016-03-25 27 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