gpt4 book ai didi

c# - 如何在不重新启动主程序的情况下更新 dll 文件?

转载 作者:太空宇宙 更新时间:2023-11-03 22:48:53 26 4
gpt4 key购买 nike

如何在不重启程序的情况下更新dll文件?

我想创建我的“更新程序”类。它的主要思想是 检查本地(连接到执行文件)和服务器 dll 文件, 当有新版本可用时,将服务器文件复制到本地。

代码:

Updater updater = new Updater(LOCAL_PATH, SERVER_PATH);
if (updater.IsAvailableNewerVersion)
updater.Update();

Updater 的 ctor 采用两条路径 - 到服务器 dll 和本地 dll 并计算它们的版本。 然后我调用一个属性 IsAvailableNewerVersion - 如果它是真的(可用版本比本地版本更新),我调用 Update 方法。 Update 方法的主要思想是将服务器 dll 文件复制到本地并覆盖,并告诉用户重新启动程序。

代码:

public class Updater
{
private readonly string _localPath;
private readonly string _serverPath;
private readonly Version _currentVersion;
private readonly Version _availableVersion;

public Updater(string localPath, string serverPath)
{
_localPath = localPath;
_serverPath = serverPath;
_currentVersion = AssemblyName.GetAssemblyName(_localPath).Version;
_availableVersion = AssemblyName.GetAssemblyName(_serverPath).Version;
}
public bool IsAvailableNewerVersion => _availableVersion.Major > _currentVersion.Major ||
_availableVersion.MajorRevision > _currentVersion.MajorRevision ||
_availableVersion.Minor > _currentVersion.Minor ||
_availableVersion.MinorRevision > _currentVersion.MinorRevision ||
_availableVersion.Build > _currentVersion.Build ||
_availableVersion.Revision > _currentVersion.Revision;
public void Update()
{
try
{
File.Copy(_serverPath, _localPath, true);
}
catch (Exception e)
{
MessageBox.Show("Unable to copying file - " + e);
return;
}
MessageBox.Show("File was successfully updated. Please restart program.");
}
}
  1. 有没有办法在使用 dll 文件之前对其进行检查?
  2. 如何在不重启程序的情况下更新dll文件?

附言我想使用服务器 dll 文件,但我的程序变得依赖于不好的服务器。

最佳答案

您不能真正卸载/更改正在运行的应用程序域中的程序集;所以基本上你在这里有两个选择:

  1. 使用执行此工作的启动器 exe 并调用内部 exe 来完成真正的工作,完成后将其关闭(在关闭之前或之后启动一个新的)
  2. 在单个 exe 中使用多个应用域,隔离每个加载的位置

第二种方法对服务器应用程序更有用,因为您可以处理外部 exe 中的网络 IO 并将请求传递到内部应用程序域,只需更改单个引用以在两个系统之间交换。但是,应用程序域不在 .NET Core 中,因此您应该意识到它限制了您的灵 active 。

关于c# - 如何在不重新启动主程序的情况下更新 dll 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48538469/

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