【问题标题】:Assembly reflection装配反射
【发布时间】:2014-12-03 11:04:43
【问题描述】:

我想从一个目录加载所有 *.dll 文件,并将每个 *.dll 文件的日期与Datetime.Now进行比较

我为此使用组装工厂:

 Assembly assembly = Assembly.LoadFile(path);

            try
            {  
                var myTypes = assembly.GetTypes();

                foreach (var myType in myTypes)
                {.....}
            }

问题是当我想用新的 *.dll 文件替换当前的 *.dll 文件时,我收到错误:*.dll 文件被其他进程使用(我的程序集)

所以我想在另一个域上运行我的汇编程序,当我取消这个域时,我的 *.dll 文件将是免费的。

感谢您的帮助。

【问题讨论】:

  • 您想在运行时检测更改吗?
  • 对不起,我不明白,但我想获取我目录中的所有 Dll 文件,并在 ListView 中显示每个 Dll 文件的类型,然后单击我想替换当前的 dll使用新的 dll 文件创建文件,但问题是 dll 文件被程序集使用,所以我必须先杀死程序集,然后才能处理我的文件
  • @KernelMed 当然是用过的,你通过加载它来使用它。
  • 那么有什么办法可以解决呢?
  • 你不能从使用这个 dll 的程序中替换 dll。

标签: c# dll reflection .net-assembly


【解决方案1】:

您需要在AssemblyResolve 活动中进行检查。 示例:

static void Main()
{
    AppDomain.CurrentDomain.AssemblyResolve += FindAssembly;
    ...
}

和事件:

static Assembly FindAssembly (object sender, ResolveEventArgs args)
{
    //here load assembly and decide which version you want
    Assembly assembly = Assembly.LoadFile(path);
    return assembly;
}

【讨论】:

  • 我需要将我的程序集附加到新域,但我不知道该怎么做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多