可能重复:
卸载用Assembly.LoadFrom()加载的Assembly

我使用自定义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!!!
              }

#1楼 票数:4 已采纳

您正在调用AppDomain的Load()方法,根据文档所述 :“应仅用于将程序集加载到当前应用程序域中。此方法为无法调用静态程序集的互操作性调用者提供了便利。加载方法。要将程序集加载到其他应用程序域中,请使用诸如CreateInstanceAndUnwrap之类的方法。

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

如上述文档摘录中所示,您可能要使用AppDomain.CreateInstanceAndUnwrap

#2楼 票数:2

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

http://blogs.msdn.com/b/jasonz/archive/2004/05/31/145105.aspx

http://msdn.microsoft.com/zh-CN/library/ms173101(v=vs.80).aspx

如果不卸载包含该程序集的所有应用程序域,则无法卸载该程序集。 即使程序集超出范围,实际的程序集文件也将保持加载状态,直到包含该程序集的所有应用程序域都被卸载为止。

http://blogs.msdn.com/b/suzcook/archive/2003/07/08/unloading-an-assembly.aspx

如果不卸载包含该程序集的所有应用程序域,则无法卸载该程序集。

  ask by Developer translate from so

未解决问题?本站智能推荐:

1回复

重复装配嵌入

我在使用<IncludeAssemblies>标记提供要嵌入的程序集列表时遇到了Costura的以下问题,我得到了一个重复项。 特别是Jetbrains.Annotations程序集是重复的。 所有其他程序集仅嵌入一次。 我可以在构建期间在Costura的输出中看到,也可以使
1回复

不复制装配的从属装配

我有一个这样的场景,例如,我有一个库说: SomeLibrary.dll ,它引用System.Net.Http和System.Net.Http.Formating只是一个带有Copy Local标志为true的示例,而该程序集实际上正在消耗其中一些类型两个dll。 然后,我创建一个新项目,
1回复

动态加载的装配体的装配体属性

我正在使用一个第三方库,该库需要使用静态方法后才能使用它-它设置了串行密钥来验证软件的许可证。 我需要在多个项目中使用该库,并且希望保护那些项目免于担心此许可证。 理想情况下,我想创建一个共享程序集,该程序集将处理许可并由使用该库的项目引用它,并将那些项目与已知的任何许可隔离开来。 开始
5回复

在C#中组织装配(装配结构)

假设您正在编写像Photoshop那样的应用程序(过滤器)等应用程序,是否应该使用单独的项目将这些过滤器中的每一个作为单独的程序集? 主要思想是将每个过滤器作为节点,因此请将其视为: 在我看来,有这样的dll文件是有道理的: 但是很难像那样管理它们,这会阻止我对类成员使用intern
2回复

加载多个装配

如何从应用程序的bin路径之外的位置使用其完整显示名称加载程序集? 通常,您可以使用以下命令从自定义位置加载装配体 这可行,但是似乎要加载强名称程序集,我需要指定其完整显示名称,例如 但是这里的问题是,它仅引用我的应用程序探查路径中的程序集。 那么,如果我有一个程序集dir1/a
3回复

局部类跨越装配

在我的框架项目中,我有一个表示内容管理系统中选项卡的类。 在某些framewrok实现中,希望使用该实现特定的选项卡定义来扩展此类。 我不得不通过将CmsTabs类更改为部分类来做到这一点,如下所示: 然后在实现框架的程序集中创建具有相同名称和名称空间的类。 但是,当我构建框架程序集
1回复

动态装配和方法

我已经编写了.NET和C#多年,但最近才遇到DynamicMethod类型以及反射上下文中动态汇编的概念。 它们似乎总是在IL(运行时代码)生成中使用。 不幸的是,MSDN在定义动态汇编/方法属性以及它们应该用于什么方面做得非常糟糕。 能不能在这里启发我吗? 与DLR有什么关系吗?
3回复

NCover没有覆盖装配体吗?

我无法让NCover正确覆盖.dll。 我有几个使用XUnit.NET和SubSpec执行BDD样式规范的测试项目。 除其中一个测试套件外,所有其他测试套件均可在TestDriven.NET(1.5.8)随附的NCover版本中完美运行。 但是,我有一个拒绝描述实际测试的程序集。 我已经