无法加载文件或程序集“Microsoft.Expression.Encoder”

Posted

技术标签:

【中文标题】无法加载文件或程序集“Microsoft.Expression.Encoder”【英文标题】:Could not load file or assembly 'Microsoft.Expression.Encoder' 【发布时间】:2015-08-29 05:34:27 【问题描述】:

我编写了一个 WCF 服务库,托管在 IIS 网站 下,以服务器来自其他网站的请求。该服务有一个名为Encode的方法,用于对最终用户上传的视频文件进行编码。我使用以下程序集:

Microsoft.Expression.Encoder.Api2.dll, Microsoft.Expression.Encoder.dll, Microsoft.Expression.Encoder.Types.dll, Microsoft.Expression.Encoder.Utilities.dll,

我已经直接从控制台应用程序测试了编码功能。但是,当我通过 IIS 网站进行测试时,每当我调用 encode 方法时,总是会抛出下面的错误。

"Could not load file or assembly 'Microsoft.Expression.Encoder, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. An attempt was made to load a program with an incorrect format."

我检查了这些Dll是否在Assembly文件夹中,它们不在,所以我将它们复制到GAC,它们在GAC32 >。我必须这样做,因为当我将 WCF 发布到 IIS 网站 时,它会将这些 Dll 复制到 bin 文件夹,并且我无法添加服务引用。当我从 bin 文件夹中删除这些 Dll 时,我只能添加服务引用。 将这些 Dll 复制到 GAC。

我还阅读了一些文章,指出 DLL 平台和运行应用程序的平台之间存在冲突。这意味着DLL是用32位应用程序构建的,但是正在运行的应用程序是在64位应用程序下运行的,等等。然后我尝试将平台和框架设置为32和4.0,但是运行的应用程序会抛出错误我添加服务参考。

我很困惑,不知道问题的根源在哪里以及如何解决它。

更新:这是我的应用程序池:

【问题讨论】:

你用的是什么版本的windows? 请在 IIS 中包含您的应用程序池的图像 @Smith:我使用的是window server enterprise 2012 -64bit。 【参考方案1】:

“尝试加载格式不正确的程序”,这部分为您提供密钥,当您尝试在 32 位进程中使用 x64 程序集时会发生这种情况,因此,您的 IIS 设置为32 位(默认情况下),使用 32 位 dll 或更改 IIS 配置以在 64 位模式下运行

【讨论】:

我在IIS网站下托管wcf时的错误是:系统找不到指定的文件。无法加载文件或程序集“Microsoft.Expression.Encoder,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。系统找不到指定的文件。 如果找不到文件,最简单的方法是将其复制到您网站的 bin 文件夹中。如果您复制它然后仍然抱怨缺少文件/依赖项,那么这些 dll 需要更多的 dll,您也应该复制这些 dll 另外,一个好主意,而不是只复制那些 dll,只需从这里将完整的编码器包安装到服务器:microsoft.com/en-us/download/details.aspx?id=24601 正如我之前所说,当我将这些 DLL 复制到 bin 文件夹时,它会抛出错误并且无法调用服务。 尝试添加引用时会出现什么错误?【参考方案2】:

到目前为止,您可能已经找到了解决此问题的方法。 您的应用程序池无法将 32 位 dll 加载到其中,因为它作为 64 位进程运行。要解决此问题,请将您的应用程序池切换为作为 32 位进程运行。更改此值后,运行 is-s-reset 以确保该值保持不变。

【讨论】:

以上是关于无法加载文件或程序集“Microsoft.Expression.Encoder”的主要内容,如果未能解决你的问题,请参考以下文章

无法加载文件或程序集 'PayPalAdaptivePaymentsSDK,版本 = 2.12.117.0

无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配

无法加载文件或程序集'netstandard,版本 = 2.0.0.0

无法加载文件或程序集 此处的程序集名称 或其依赖项之一。访问被拒绝

无法加载文件或程序集或其依赖项之一

寻找解决策略:无法加载文件或程序集[重复]