这是一个装配件不匹配的问题:从一个程序集引用的 DLL 没有符合预期的方法签名。
清理解决方案,重新构建所有内容,再试一次。
另外,请注意:如果这是对全局程序集缓存 (GAC) 中某个东西的引用,则可能会出现某些东西指向了错误的版本。通过每个引用的属性确保选择了正确的版本或将 Specific Version 设置为 false。
我最近遇到了这个问题,然后我在问题的dll上运行了'depends.exe'。它告诉我该dll是在x86下编译的,而一些依赖项却是在x64下编译的。
如果您仍然有疑问,我建议使用depends.exe。
在我的情况下,针对一个WCF REST服务项目,我需要在web.config中添加一个运行时部分,其中包含所请求的dll:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
.
.
.
<runtime>
只需删除bin文件夹,然后重新创建项目,所有内容都会再次生成,现在应该可以正常运行了。
通过删除所有的运行时部分,我的问题得到了解决。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
"Error while calling service <ServiceName> Could not load file or assembly 'RestSharp,
Version=105.2.3.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)"
原因
在我的项目中,有两个内部组件都使用了RestSharp,但这两个组件分别使用不同版本的RestSharp(一个使用版本号为105.2.3.0
的,另一个使用版本号为106.2.1.0
的)。
要么将其中一个组件升级到较新的版本,要么将另一个组件降级。在我的情况下,更安全的做法是将版本号从106.2.1.0
降级到105.2.3.0
,然后在NuGet包管理器中更新组件,这样两个组件就有了相同的版本。
重新构建后,问题得到了解决。
在通过共享文件夹从不同的计算机访问项目文件时,我遇到了类似的问题。在我的情况下,清除并重新构建没有起到帮助作用。必须从输出目录中删除bin和objects文件夹。
CreateObject
时得到了这个结果。在我的情况下,原因是程序集的版本存储在GAC中,而该版本比我编译的版本旧。(为了解决早期的问题,我将程序集安装在了GAC中)。在我的情况下,这是因为WebGrease的原因。我使用NuGet更新了它到最新版本,但与依赖项发生了冲突。我手动添加了以下代码到web.config中,并且它完美地工作了。
<dependentAssembly>
<assemblyIdentity name="WebGrease" culture="neutral" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
</dependentAssembly>