如果使用来自其他项目的扩展方法,linq查询将引发EntryPointNotFoundException,但如果扩展方法位于同一项目中,则运行良好

问题描述

我正在项目A中工作。有一个对项目B的引用(同一解决方案的一部分),其中包含以下扩展方法:

public static class Extensions
{
    public static IDictionary<string,Component2> GetAllComponentsByName(this AssemblyDoc assyDoc) =>
        ((object[])assyDoc.GetComponents(false)).Cast<Component2>().ToDictionary(c => c.Name2,c => c);
}

像这样在项目A的代码中使用它时

public void DoSth(AssemblyDoc assyDoc)
{
    var x = assyDoc.GetAllComponentsByName();
    var y = x.OrderBy(kv => kv.Key).ToArray();
}

然后,OrderBy查询(更确切地说是由于ToArray导致的枚举)抛出EntryPointNotFoundException

但是,如果我将Extensions类放在项目A中,则可以正常工作。

您知道为什么会这样吗?知道我能做什么才能使用项目B中的扩展方法吗?

(此解决方案中的其他项目也需要使用该扩展方法,并且我不想重复代码。)

以下是有关所用类的一些信息:

  • 我正在编写SolidWorks插件;这是通过使用SolidWorks API以某种方式编写类库来完成的。 SolidWorks API程序集是使用nuget安装的。
  • SolidWorks是用C ++编写的。
  • SolidWorks API对象是COM对象。 AssemblyDocComponent2就是这样的COM对象。
  • 方法AssemblyDoc.GetComponents(bool)返回dynamic,但是从文档中我知道实际返回的对象是object[],其中每个项目代表一个Component2。这就是为什么我首先转换为object[]然后使用Cast<Component2>的原因。
  • 方法Component2.Name2返回一个string

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)