Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何清除.NET';什么是反射缓存?_C#_.net_Caching_Reflection - Fatal编程技术网

C# 如何清除.NET';什么是反射缓存?

C# 如何清除.NET';什么是反射缓存?,c#,.net,caching,reflection,C#,.net,Caching,Reflection,如果使用反射检索程序集,它将查找该程序集,然后缓存它。我可以这么说,因为如果它找不到程序集,即使我将它添加到正确的位置,它也找不到它。如果它找到程序集,我将其删除,它仍然使用它找到并缓存的程序集 我知道我不是唯一一个有这个问题的人: 我用于获取程序集的代码如下所示——我每次都进行此调用(而不是缓存自己): 我想知道的是,是否有办法在不重新启动进程的情况下清除反射缓存。任何帮助都将不胜感激 提前谢谢 您不能在.Net中卸载程序集-但是您可以关闭应用程序域(程序集加载到其中)。您不能在.Net中卸载

如果使用反射检索程序集,它将查找该程序集,然后缓存它。我可以这么说,因为如果它找不到程序集,即使我将它添加到正确的位置,它也找不到它。如果它找到程序集,我将其删除,它仍然使用它找到并缓存的程序集

我知道我不是唯一一个有这个问题的人:

我用于获取程序集的代码如下所示——我每次都进行此调用(而不是缓存自己):

我想知道的是,是否有办法在不重新启动进程的情况下清除反射缓存。任何帮助都将不胜感激


提前谢谢

您不能在.Net中卸载程序集-但是您可以关闭应用程序域(程序集加载到其中)。

您不能在.Net中卸载程序集-但是您可以关闭应用程序域(程序集加载到其中)。

可以使用
Assembly.LoadFrom
可能吗?您传递给Assembly.Load的是什么?一根绳子?字节数组?AssemblyName实例?@Fernando-我将沿着以下行传入一个字符串:“ClassLibrary1,Version=1.0.0,Culture=Neutral,PublicKeyToken=d48aa85d4ceaf047”@m.Babcock-我使用GAC是为了方便地对程序集进行版本控制,因此从文件加载是不适用的。而且,它的行为是相同的——如果我没有该文件,那么我添加它,它仍然找不到它。(我不能用另一种方法进行测试,因为文件被锁定了,我无法删除它,但我想它是一样的。)使用
Assembly.LoadFrom
也许吧?你要传递什么给Assembly.Load?一根绳子?字节数组?AssemblyName实例?@Fernando-我将沿着以下行传入一个字符串:“ClassLibrary1,Version=1.0.0,Culture=Neutral,PublicKeyToken=d48aa85d4ceaf047”@m.Babcock-我使用GAC是为了方便地对程序集进行版本控制,因此从文件加载是不适用的。而且,它的行为是相同的——如果我没有该文件,那么我添加它,它仍然找不到它。(我不能用另一种方法进行测试,因为文件被锁定了,我不能删除它,但我想它是一样的。)不完全正确。有一种特殊类型的程序集可以卸载。但从文件加载的程序集永远无法卸载。也可以通过在AppDomains之间共享程序集的方式加载程序集,而不要因为卸载其中一个程序集而卸载。“程序集加载反射发射是加载可收集程序集所支持的唯一机制。无法卸载由任何其他形式的程序集加载的程序集。”从文章链接。因此,要卸载,我必须动态生成程序集。感谢你们两位的回答-我尝试做的是不可能的。尽管卸载的概念与加载从未加载过的缓存的概念有点不同,但如果缓存失败一次,缓存将不会再次尝试获取它。(不过,可能是同一概念的一部分,即无论操作结果是什么,它都会保留操作结果。)不完全正确。有一种特殊类型的程序集可以卸载。但从文件加载的程序集永远无法卸载。也可以通过在AppDomains之间共享程序集的方式加载程序集,而不要因为卸载其中一个程序集而卸载。“程序集加载反射发射是加载可收集程序集所支持的唯一机制。无法卸载由任何其他形式的程序集加载的程序集。”从文章链接。因此,要卸载,我必须动态生成程序集。感谢你们两位的回答-我尝试做的是不可能的。尽管卸载的概念与加载从未加载过的缓存的概念有点不同,但如果缓存失败一次,缓存将不会再次尝试获取它。(不过,可能是同一概念的一部分——它将保留操作的结果,而不管它们是什么。)
// Try to get the assembly referenced.
Assembly reflectedAssembly;
try
{
    reflectedAssembly = Assembly.Load(assembly);
}
catch (FileNotFoundException)
{
    errorMessage = string.Format("Could not find assembly '{0}'", assembly);
    result = null;
    return false;
}