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

时间:2015-08-29 05:34:28

标签: c# wcf

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

  

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是否在程序集文件夹中,但它们不是,所以我将它们更改为 GAC ,并且它们位于 GAC32 。我不得不这样做,因为当我将 WCF 发布到 IIS网站时,它将这些Dll写入bin文件夹,我无法添加服务引用。当我从 bin 文件夹中删除这些Dll时,我只能添加服务引用。 将这些Dll复制到GAC。

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

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

更新:这是我的应用程序池: enter image description here

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

enter image description here