在WinForms应用程序中获取DLL

时间:2010-11-19 11:17:09

标签: c# winforms desktop-application

我必须创建一个类,它将从存储库加载所有dll并检查是否 它们继承自IMFServicePlugin接口并返回 有效的dll。 我用这个做过......

using System;
using System.Collections.Generic;

using System.Diagnostics;
using System.Reflection;

using System.Windows.Forms.ComponentModel;
using MFDBAnalyser;

namespace MFDBAnalyserAssemblyValidator
 {
  public class MFDBAnalyserAssemblyValidator
  {
   static void Main(string[] args)
    {
        List<string> assemblyNames = new List<string>();
        Assembly[] oAssemblies = new Assembly[args.Length];

        for (int assemblyCount = 0; assemblyCount < args.Length; assemblyCount++)
        {
            oAssemblies[assemblyCount] = Assembly.LoadFile(args[assemblyCount]);

            try
            {
                foreach (Type oType in oAssemblies[assemblyCount].GetTypes())
                {
                    // Check whether class is inheriting from IMFServicePlugin.
                    if (oType.GetInterface("IMFDBAnalyserPlugin") == typeof(IMFDBAnalyserPlugin))
                    {
                        assemblyNames.Add(args[assemblyCount].Substring(args[assemblyCount].LastIndexOf("\\") + 1));
                    }
                }
            }
            catch (Exception ex) 
            {
                lblError.Text = "ERROR";
            }
        }

        // Passing data one application domain to another.
        AppDomain.CurrentDomain.SetData("AssemblyNames", assemblyNames.ToArray());
   }
  }
 }

但这是从存储库加载dll但我也想将这些dll存储在另一个ORM类中。

任何人都可以帮助我... 如果可能,请提供一些链接,以便我可以充分了解dll如何适用于Windows /桌面应用程序。

1 个答案:

答案 0 :(得分:1)

在第一个提示时,您应该使用Assembly.ReflectionOnlyLoad()。因为如果使用Assembly.LoadFile()加载程序集,程序集将自动放入您的本地AppDomain!