【问题标题】:Cannot load an assembly via MEF due to missing another assembly由于缺少另一个程序集,无法通过 MEF 加载程序集
【发布时间】:2013-06-24 15:12:52
【问题描述】:

问题:

我有两个项目。第一个命名为 Studio,第二个命名为 Worker,这是一个类库。 Worker 项目是指一些第三方程序集,如 Ecng.Common、Ecng.Data 等。

当我尝试通过 MEF 在 Studio 中加载 Worker 时,MEF 抛出异常:

找不到文件或程序集 Ecng.Transactions

但是,Worker 中没有针对 Ecng.Transactions 的项目引用。工人在没有它的情况下工作。

我需要做什么来解决这个问题?

编辑 1:

var catalog = new AggregateCatalog(); 

foreach (var nameAndPath in robotsDirectory) 
{ 
  catalog.Catalogs.Add(new DirectoryCatalog(nameAndPath.Value)); 
} 

var container = new CompositionContainer(catalog);

container.ComposeParts(this); // Here i have Exception 

【问题讨论】:

  • 你需要添加一些代码,所以这里的人可能会帮助你

标签: .net .net-4.0 mef


【解决方案1】:

Worker 引用的任何程序集是否引用了 Ecng.Transactions?您可以使用 DotPeek 或 Visual Studio 对象资源管理器等工具来解决这个问题

你什么时候收到错误消息?

  1. 当 MEF 为 MEF 导出标签解析 Worker 程序集时?或
  2. 当您尝试在 Worker 中加载特定类时?

【讨论】:

  • var catalog = new AggregateCatalog(); foreach (var nameAndPath in robotsDirectory) { catalog.Catalogs.Add(new DirectoryCatalog(nameAndPath.Value)); } var container = new CompositionContainer(catalog);容器.ComposeParts(this); // 这里我有异常
  • @Vader 您是否检查过您要求 MEF 查看哪些目录?此类目录中的 dll 可能依赖于 Transactions dll。 MEF 还会让您知道它是为哪个类实例引发错误的。
  • 是的,3 程序集依赖于 Transactions.dll。但是当我bild Worker时,输出目录中没有Transactions.dll,它可以正常工作。
  • 最后,我将 Transactions.dll 与另一个程序集一起手动放入目录中。但它不起作用。我也有同样的例外。
  • @Vader Transaction.dll 加密了吗?所有 dll 是否都引用了您复制到文件夹中的同一个公钥和版本化事务 dll?发布确切的异常消息。还启用第一次机会异常并调试应用程序。它将为您提供更多信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 2021-12-23
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多