如何在Assembly.LoadFile()之前从DLL读取属性

时间:2015-12-15 02:47:13

标签: c# dll .net-assembly

我的程序有一个pluginManager模块,它可以加载DLL文件并运行DLL的方法,但我需要在Assembly.LoadFile()之前读取DLL属性。我该怎么办?

我对于Assembly文档感兴趣,他们在Assembly.LoadFile()之后读取属性,你知道Assembly没有UnLoad()方法,所以我必须在LoadFile()之前读取属性 enter image description here

    private void ImprotZip(string path)
    {
        /*
        1、create tempDir, uppackage to tempDir
        2、Load Plugin DLL, Load plugin dependent lib DLL
        */
        string tempDirectory = CreateRuntimeDirectory(path);
        string[] dllFiles = Directory.GetFiles(tempDirectory);
        ///Load DlL
        foreach(string dll in dllFiles)
        {
            ImprotDll(dll, false);
        }
        string libPath = string.Format("{0}\\lib\\", tempDirectory);
        if (!Directory.Exists(libPath))
            return;
        string[] dlls = Directory.GetFiles(libPath);
        ///Load plugin dependent lib DLL
        foreach(string dll in dlls)
        {
            try
            {
                //filtering same DLL 
                //if(Dll.properties.AssemblyProduct != "something")
                //continue;
                Assembly.LoadFile(dll);
            }
            catch(Exception e)
            {
                e.Log();
            }
        }
    }

3 个答案:

答案 0 :(得分:4)

您可以使用Assembly.ReflectionOnlyLoad将程序集加载到仅反射上下文中。

我仍然会为仅反射上下文创建一个应用程序域,这样您就可以在完成后卸载域。您可以使用AppDomain.CreateDomain方法创建应用域。你应该为插件做这个,所以你可以在完成后卸载它们。

答案 1 :(得分:1)

FileVersionInfo.GetVersionInfo正是您正在寻找的。

答案 2 :(得分:0)

尝试使用此代码

AppDomain.CurrentDomain.AssemblyResolve + =(sender,bargs)=>                 {

num