[英]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.