簡體   English   中英

如何使用MEF和dll在DLL項目中嵌入資源C#

[英]How to use MEF and dlls embeded resources in a dll project c#

對於重要的項目,我必須使用MEF來構建大型裝配體。 程序集必須打開Web服務器。

我的問題是如何使用MEF加載嵌入的dll並將其添加到我的項目中? 在我使用這種有效的方法之前:

        var catalog = new AggregateCatalog();
        catalog.Catalogs.Add(new DirectoryCatalog(@"R:\DNN\Extensions", "*.dll"));

        var container = new CompositionContainer(catalog);
        try
        {
            container.ComposeParts(this);
        }
        catch (CompositionException compositionException)
        {
            Console.WriteLine(compositionException.ToString());
        }  

但是用這種解決方案很難做到! 使用中時,我無法更新Extansions文件夾中的dll。

唯一的方法是重新啟動DNN cms或在新文件夾ExtensionsBis中收費更新的dll。

我必須找到一種新的解決方案,以使用極佳的dll組成項目。 我已經嘗試過使用嵌入式dll的解決方案:

        var catalog = new AggregateCatalog();
        var resourceNames = GetType().Assembly.GetManifestResourceNames();
        foreach (var resourceName in resourceNames)
        {
            using (var stream = GetType().Assembly.GetManifestResourceStream(resourceName))
            {
                if (stream == null) continue;
                var ba = new byte[(int)stream.Length];
                stream.Read(ba, 0, (int)stream.Length);
                catalog.Catalogs.Add(new AssemblyCatalog(Assembly.Load(ba)));
            }
        }
        var container = new CompositionContainer(catalog);
        try
        {
            container.ComposeParts(this);
        }
        catch (CompositionException compositionException)
        {
            Console.WriteLine(compositionException.ToString());
        }

將dll加載並添加到目錄中,組成我也不例外。

但是,當我嘗試在運行時執行導出的函數或訪問該類時,出現異常“對象引用未設置為對象的實例”。

catalog.catalogs.count給出了已充電dll的儀式數量,但MEF組合似乎在某處失敗。

這樣可以加載MEF dll插件嗎? 在dll中使用MEF的最佳實踐是什么?

感謝您的幫助。

使用FileSystemWatcher類來監視存儲插件的文件夾。 為Created事件配置事件處理程序,並使用您的初始代碼塊加載庫。

暫無
暫無

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

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