gpt4 book ai didi

c# - 将程序集加载到子 AppDomain 并释放 dll 文件

转载 作者:太空狗 更新时间:2023-10-29 23:17:56 25 4
gpt4 key购买 nike

我有子应用程序域,我想在启动和发布文件时加载一些 dll 库,以便任何人都可以删除它们。

在启动时我这样做

Loader al = (Loader)domain.CreateInstanceAndUnwrap(
typeof(Loader).Assembly.FullName,
typeof(Loader).FullName);
al.Load(path)

对于下面的类。

class Loader : MarshalByRefObject
{
internal void Load(string path)
{
Assembly assembly;
try
{
assembly = Assembly.Load(File.ReadAllBytes(path));
}
catch (Exception) { return; }
}
internal UseType(string fullyQualifiedTypeName)
{
Type userType = Type.GetType(fullyQualifiedTypeName);
}
}

稍后我调用 UseType 并得到正确的类型,但我无法再删除该文件,因为它好像子应用程序域已锁定 dll。

基本上我想要实现的是在启动时缓存程序集文件,然后使用 GetType 调用,以便释放实际的 dll 文件。

真的有可能实现这样的目标吗?

最佳答案

创建应用程序域时使用卷影副本。将 dll 复制到缓存中,任何人都可以与文件系统交互。

Topshelf 通过我们的搁置来做到这一点(然后一切都在它自己的应用程序域中)- https://github.com/Topshelf/Topshelf/blob/v2.3/src/Topshelf/Model/ShelfReference.cs#L126 .

更新:Topshelf 不再执行此操作,但更新了指向执行此操作的版本的链接。

关于c# - 将程序集加载到子 AppDomain 并释放 dll 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6985407/

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