簡體   English   中英

.NET dll熱插拔,沒有應用程序重啟

[英].NET dll hot swap, no application restart

假設您在.NET(C#)中有以下情況:

namespace MyDll
{
    public class MyClass
    {
        public string GetValue()
        {
            return "wrong value";
        }
    }
}

這段代碼編譯成一個dll說,MyDll.Dll。

然后你有一個名為MyApplication.exe的應用程序,使用MyDll.dll作為參考,創建一個MyClass類的實例並調用方法GetValue:

MyClass instance = new MyClass();
instance.GetValue();

一旦你意識到MyClass.GetValue()的當前實現是錯誤的,有什么方法可以修復MyClass.GetValue()這樣的方法

namespace MyDll
{
    public class MyClass
    {
        public string GetValue()
        {
            return "correct value";
        }
    }
}

和HOT交換生成的MyDll.dll,而不重新啟動MyApplication.exe ???

stackoverflow和google中提出的所有解決方案都無法正常工作,因為即使MyDll.dll加載到為此目的創建的新AppDomain上,當我卸載調用時也是如此

AppDomain.Unload(anoterAppDomainJustForMyDll);

它返回沒有錯誤,但如果我嘗試用更正的一個覆蓋原始的MyDll.dll(當MyApplication.exe仍在運行時)我收到錯誤“無法覆蓋,因為另一個進程使用的dll”....

問題由我自己關閉:請參閱codeplex中的文章

對我而言,能夠在不重新啟動應用程序的情況下熱交換新的dll非常重要,正如文章所提出的,這可以完成,因為這是通過使用應用程序本身來完成的。 我之前的嘗試失敗的原因是我試圖從外部覆蓋目標dll(在這種情況下是在資源管理器中)。 但是如果覆蓋是在提議的解決方案中完成的,那么從應用程序本身來看,它可以按預期工作。

我需要在應用程序端更多地定義可以部署可版本化ddls的目錄,但這對我來說是完全可以接受的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM