簡體   English   中英

在運行時更改.dll

[英]Change .dll in runtime

我有一個龐大的應用程序,我的解決方案的一個項目報告。 我想在不構建項目的情況下添加新報告(更新報告),只需添加.dll文件。 我讀到了關於AssemblyAppDomain ,但我不知道為新報告添加新的dll以及如何在運行時更新舊報告真的很好嗎? 這是我的例子,它需要我的第一個dll,但第二次沒有。 第一個dll - 總和,秒 - 扣除。

    static void Main(string[] args)
    {
        try
        {
            //first domain
            AppDomain domain = AppDomain.CreateDomain("MyDomain");
            AssemblyDll asb1 = new AssemblyDll();
            Console.WriteLine(asb1.AssemblyMethod(1));
            AppDomain.Unload(domain);
            Console.ReadKey();

            //second domain
            AppDomain newDomain = AppDomain.CreateDomain("myNewDomain");
            AssemblyDll asb2 = new AssemblyDll();
            Console.WriteLine(asb2.AssemblyMethod(2));
            AppDomain.Unload(newDomain);
            Console.ReadKey();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

public class AssemblyDll
{
    public string AssemblyMethod(int version)
    {
        //loading .dll
        Assembly assembly = Assembly.LoadFrom(@"../../../../Assembly/DynamicDLL" + version + ".dll");
        Type type = assembly.GetType("DynamicDLL.Dynamic");
        object instance = Activator.CreateInstance(type);
        MethodInfo[] methods = type.GetMethods();
        //invoke method
        object result = methods[0].Invoke(instance, new object[] { 5, 3 });
        return result.ToString();
    }
}

我的.dll文件來自:

namespace DynamicDLL
{
    public class Dynamic
    {
        public int DynamicMethod(int a, int b)
        {
            return a + b;
            //return a - b;
        }
    }
}

程序集通常一次加載到AppDomain ,一旦加載就無法卸載它們。

您可以創建一個新的AppDomain並將程序集加載到此中,當您釋放它時,將卸載程序集。 但是這里需要注意的是,你不能直接在兩個AppDomain之間進行通信,你必須使用其他一些方法(例如遠程處理)來編組。

在插件和插件無法加載方面有很多關於這方面的文章,快速谷歌搜索提出了這些:

http://www.brad-smith.info/blog/archives/500

http://adrianvintu.com/blogengine/post/Unloadable-plugins.aspx

希望這些能幫到你。

如果你想寫插件之類的東西,比如插件方法,你應該看看MEF http://msdn.microsoft.com/en/library/vstudio/dd460648.aspx

MEF允許您動態使用任何程序集,甚至將dll刪除到文件夾中,並從中構建MEF目錄。

實際上是Visual Studio並在內部使用MEF來實現可擴展性(插件......)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM