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



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

我在解决方案中使用了这个类库作为对其他项目的项目引用,这很好,但当我试图从我的主要web应用程序(web窗体(中引用这个库并调用AMS函数时,它会尝试加载一个完全不相关的程序集(crystal reports(。

这种情况仅在使用Linq表达式时发生,通过Id搜索Asset,例如:

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扩展方法会导致在一个完全无关的程序集上进行查找吗?

2018年7月18日编辑仍然没有解决,但我尝试了以下方法:-删除了所有Crystal Enterprise 2016参考资料:代码工作-重新添加Crystal引用:代码有效-重新添加了Crystal实现代码,我得到了关于无法嵌入互操作的错误,所以我需要将嵌入互操作类型更改为False,一旦我这样做,它就会将其他几个DLL和.netmodule文件带到我的/bin文件夹中,一旦发生这种情况,错误再次出现,我就回到了原点1

我已经设法解决了这个问题,以防其他人遇到类似的情况。

为了澄清,我不认为这个问题与Crystal报告或Azure媒体服务有任何关系。

这归结为为为Crystal enterprise安装的引用的简单版本控制问题,web项目的引用位置与安装的Crystal enterprise SDK不同,只是一个较小的增量构建修订。

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

最新更新