我有一个隔离的类库项目,它是一个很大的解决方案的一部分,该解决方案执行各种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格
答案 0 :(得分:0)
在其他人遇到类似情况的情况下,我设法解决了这个问题。
为了澄清这一点,我认为此问题与Crystal报表或Azure媒体服务无关。
这归结为为Crystal Enterprise安装的参考的一个简单的版本控制问题,该Web项目的参考位置与已安装的Crystal Enterprise SDK不同,但有一个较小的增量版本。
我仍然无法解释是什么原因导致Linq扩展方法加载了不相关的Crystal企业程序集,但是问题是,将.netmodule拖入/ bin目录的方式与项目中引用的DLL不同。 >