gpt4 book ai didi

c# - .NET dll 热插拔,无需重启应用程序

转载 作者:可可西里 更新时间:2023-11-01 08:28:51 26 4
gpt4 key购买 nike

假设您在 .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";
}
}
}

并在不重新启动 MyApplication.exe 的情况下热交换生成的 MyDll.dll???

stackoverflow 和 google 中提出的所有解决方案都无法工作,因为即使 MyDll.dll 加载到为此目的创建的新 AppDomain 上,当我卸载调用时也是如此

AppDomain.Unload(anoterAppDomainJustForMyDll);

它返回时没有错误,但是如果我尝试用更正的 MyDll.dll 覆盖原始的 MyDll.dll(而 MyApplication.exe 仍在运行),我会收到错误消息“无法覆盖,因为另一个进程正在使用 dll”。 ...

最佳答案

问题已自行关闭:请引用codeplex中的文章

对我来说,能够在不重新启动应用程序的情况下热交换新的 dll 非常重要,正如本文所建议的那样,这是可以完成的,因为这是通过应用程序本身完成的。我之前尝试失败的原因是我试图从外部覆盖目标 dll(在本例中是在资源管理器中)。但是,如果覆盖是按照建议的解决方案从应用程序本身完成的,它将按预期工作。

我需要在应用程序方面做更多的工作来定义可以部署版本化 ddl 的目录,但这对我来说是完全可以接受的。

关于c# - .NET dll 热插拔,无需重启应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25181542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com