[英].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.