Linq IQueryable FirstOrDefault调用尝试加载不相关的程序集

时间:2018-07-17 21:30:34

标签: c# linq

我有一个隔离的类库项目,它是一个很大的解决方案的一部分,该解决方案执行各种Azure媒体服务功能,上传资产,编码等。

在解决方案中,我已经很好地使用此类库作为对其他项目的项目引用,但是,当我尝试从主Web应用程序(Web表单)引用该库并调用AMS函数时,它将尝试加载完全无关的程序集(晶体报告)。

仅当使用Linq表达式并通过Asset搜索Id时才会发生这种情况:

var assetInstance = from a in _context.Assets
                    where a.Id == assetId
                    select a;

// Reference the asset as an IAsset.
asset = assetInstance.FirstOrDefault();

调用.FirstOrDefault()时,这是我收到FileNotFoundException的地方:

  

System.IO.FileNotFoundException:'无法加载文件或程序集'BusinessObjects.Enterprise.Sdk.ZipLib.netmodule'或其依赖项之一。找不到指定的模块。

我的主要Web应用程序项目的确有Crystal企业引用,并且异常中指出的文件确实存在于/ bin目录中,这使它更加陌生。

有人知道为什么Linq扩展方法会导致在完全不相关的程序集上进行查找吗?

EDIT七月18/18 仍然没有解决,但是我尝试了以下方法: -删除了所有Crystal Enterprise 2016参考:代码有效 -重新添加Crystal引用:代码有效 -重新添加了Crystal实施代码,并且出现有关无法嵌入互操作的错误,因此我需要将“嵌入互操作类型”更改为False,一旦这样做,它将把其他几个DLL和.netmodule文件引入我的/ bin文件夹,一旦发生这种情况,错误就会再次出现,我回到第1格

1 个答案:

答案 0 :(得分:0)

在其他人遇到类似情况的情况下,我设法解决了这个问题。

为了澄清这一点,我认为此问题与Crystal报表或Azure媒体服务无关。

这归结为为Crystal Enterprise安装的参考的一个简单的版本控制问题,该Web项目的参考位置与已安装的Crystal Enterprise SDK不同,但有一个较小的增量版本。

我仍然无法解释是什么原因导致Linq扩展方法加载了不相关的Crystal企业程序集,但是问题是,将.netmodule拖入/ bin目录的方式与项目中引用的DLL不同。 >