我有一个独立的类库项目,是一个非常大的解决方案的一部分,该解决方案执行各种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不同。