共用方式為


陰影複製組件

更新:2007 年 11 月

陰影複製可允許更新用於應用程式定義域內的組件,而不需卸載應用程式定義域。這個功能對於必須持續可用的應用程式 (例如 ASP.NET 網站) 非常有幫助。

Common Language Runtime 會在組件載入時鎖定該組件檔,好讓該檔案在卸載組件之前無法更新。從應用程式定義域卸載組件的唯一方法就是卸載應用程式定義域,因此在正常情況下,要等到使用該組件的所有應用程式定義域卸載之後,才能更新磁碟上的該組件。

當應用程式定義域設定為陰影複製檔案時,會將組件從應用程式路徑複製到另一個位置,並從該位置載入組件。複本會遭到鎖定,而原始的組件檔則已解除鎖定,並且可以進行更新。

重要事項:

只有儲存在應用程式目錄或其子目錄中的組件才可以陰影複製,這些目錄是由設定應用程式定義域時的 ApplicationBasePrivateBinPath 屬性所指定。儲存在全域組件快取中的組件不會進行陰影複製。

下列清單說明如何使用 AppDomainSetup 類別的屬性來設定要進行陰影複製的應用程式定義域。

  • ShadowCopyFiles 屬性設定為字串值 "true" 即可啟用陰影複製。

    根據預設,這樣會使應用程式路徑內的所有組件在載入之前先複製到下載快取中。此快取與 Common Language Runtime 用來儲存來自其他電腦之下載檔案所維護的快取相同,而 Common Language Runtime 會在這些檔案不再需要時自動刪除。

  • 選擇性地使用 CachePath 屬性和 ApplicationName 屬性為陰影複製檔案設定自訂位置。此位置的基底路徑是由串連 ApplicationName 屬性與 CachePath 屬性當做子目錄所組成。組件會被陰影複製到這個路徑的子目錄中,而不是複製到基底路徑本身。

    注意事項:

    如果未設定 ApplicationName 屬性,則會忽略 CachePath 屬性,並使用下載快取。不會擲回例外狀況。

    如果您指定了自訂位置,您必須在不再需要目錄和複製的檔案時,負責清除它們,而不會將其自動刪除。

    讓您想要為陰影複製檔案設定自訂位置的理由可能有好幾個。如果您的應用程式產生了大量的複本,您可能需要為陰影複製檔案設定自訂位置。下載快取會受到大小的限制,而不是存留期 (Lifetime) 的限制,因此,Common Language Runtime 可能會嘗試刪除仍在使用中的檔案。另一個設定自訂位置的原因是當執行應用程式的使用者對於 Common Language Runtime 用於下載快取的目錄位置不具有寫入存取權限時。

  • 選擇性地使用 ShadowCopyDirectories 屬性可限制陰影複製的組件。

    當您為某個應用程式定義域啟用陰影複製時,預設會複製應用程式路徑內 (即 ApplicationBasePrivateBinPath 屬性所指定的目錄) 的所有組件。您可以建立只包含您想要陰影複製之目錄的字串,並將此字串指派給 ShadowCopyDirectories 屬性,以限制複製到選定目錄的動作;請用分號分隔目錄。此時只會針對選定目錄內的組件進行陰影複製。

已經過時的方法

AppDomain 類別包含可在應用程式定義域上用來控制陰影複製的數個方法 (例如 SetShadowCopyFilesClearShadowCopyPath),不過這些方法在 .NET Framework 2.0 版內已標記為過時。設定應用程式定義域來進行陰影複製的建議方法是使用 AppDomainSetup 類別的屬性。

請參閱

參考

AppDomainSetup.ShadowCopyFiles

AppDomainSetup.CachePath

AppDomainSetup.ApplicationName

AppDomainSetup.ShadowCopyDirectories