C# 为什么程序集仍然可见?

C# 为什么程序集仍然可见?,c#,.net,C#,.net,可能重复: 我使用自定义AppDomain加载/卸载程序集。但卸载程序集后,我可以在AppDomain.CurrentDomain下看到它 怎么可能呢?这是正常的行为还是我遗漏了什么 谢谢你提供的任何线索 string assemblyPath = @"C:\MyFile.dll"; var assemblyName = AssemblyName.GetAssemblyName(assemblyPath); var ads = new AppDomainSetup

可能重复:

我使用自定义
AppDomain
加载/卸载程序集。但卸载程序集后,我可以在
AppDomain.CurrentDomain
下看到它

怎么可能呢?这是正常的行为还是我遗漏了什么

谢谢你提供的任何线索

 string assemblyPath = @"C:\MyFile.dll";
 var assemblyName = AssemblyName.GetAssemblyName(assemblyPath);

            var ads = new AppDomainSetup
                          {
                              ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase, 
                              DisallowCodeDownload = true 
                          };

            AppDomain newDomainName = AppDomain.CreateDomain("newDomainName", null, ads);
              try
              {
                  Assembly testLibrary = newDomainName.Load(assemblyName);

                  var c1 = AppDomain.CurrentDomain.GetAssemblies();

                  var c2 = newDomainName.GetAssemblies();
              }
              finally
              {
                  AppDomain.Unload(newDomainName);

                  var c3 = AppDomain.CurrentDomain.GetAssemblies();

                  // The assembly is still visible here!!!
              }

无法从应用程序域中删除加载的程序集

如果不卸载所有部件,则无法卸载单个部件 包含它的应用程序域的。即使大会结束 超出范围,实际程序集文件将保持加载状态,直到所有 包含它的应用程序域将被卸载

如果不卸载所有组件,则无法卸载单个组件 包含它的应用程序域的


无法从应用程序域中删除加载的程序集

如果不卸载所有部件,则无法卸载单个部件 包含它的应用程序域的。即使大会结束 超出范围,实际程序集文件将保持加载状态,直到所有 包含它的应用程序域将被卸载

如果不卸载所有组件,则无法卸载单个组件 包含它的应用程序域的


您正在调用AppDomain的
Load()
方法,该方法根据:“应仅用于将程序集加载到当前应用程序域中。提供此方法是为了方便无法调用静态Assembly.Load方法的互操作性调用方。要将程序集加载到其他应用程序域,请使用CreateInstanceAndUnwrap等方法。“

换句话说,您正在将程序集加载到主AppDomain中,因为您正在从主AppDomain调用
Load()
(即使您正在对辅助AppDomain的实例调用它),这就是为什么即使在卸载辅助AppDomain后,程序集也会出现的原因


如上面文档摘录中所述,您可能希望使用。

您正在调用AppDomain的
Load()
方法,根据:“应仅用于将程序集加载到当前应用程序域中。提供此方法是为了方便无法调用静态Assembly.Load方法的互操作性调用方。要将程序集加载到其他应用程序域,请使用CreateInstanceAndUnwrap等方法。“

换句话说,您正在将程序集加载到主AppDomain中,因为您正在从主AppDomain调用
Load()
(即使您正在对辅助AppDomain的实例调用它),这就是为什么即使在卸载辅助AppDomain后,程序集也会出现的原因


如上面文档摘录所示,您可能想使用。

但我正在卸载AppDomain.Unload(newDomainName);请告诉我哪里错了?@Peretz Iridium是正确的。您加载的程序集不正确。但我正在卸载AppDomain.Unload(newDomainName);请告诉我哪里错了?@Peretz Iridium是正确的。您加载的程序集不正确。@asawyer不,这不是重复的问题,我使用新的AppDomain保持加载的程序集。@asawyer不,这不是重复的问题,我使用新的AppDomain保持加载的程序集。