生成WCF服务类型时,.NET加载程序正在寻找另一个程序集版本。

7

在尝试在Visual Studio 2013中为我的ASP.NET Web应用程序添加服务引用时,我遇到了这个错误。 我的项目中已经引用了Microsoft.Owin.Security版本2.1.0.0。但是为什么他要寻找2.0.1.0版本呢?

无法导入wsdl:portType详细信息:运行WSDL导入扩展时发生异常: System.ServiceModel.Description.DataContractSerializerMessageContractImporter 错误:无法加载文件或程序集“Microsoft.Owin.Security, Version=2.0.1.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或 它的某个依赖项。系统找不到指定的文件。


1
我也遇到了同样的问题... 有什么结论吗? - Hélder Gonçalves
你检查过项目文件了吗?很可能只是那个特定 OWIN 包中 Nuget 包的一个 bug。它可能在你的项目文件中放入了错误的版本号,但正确的程序集在你的引用中。 - user817530
你好,我有同样的问题。 我检查了我的项目文件:引用都是正确的。 有人有什么线索吗? - Sam
我发现当我从“在所有引用的程序集中重用类型”更改为“在指定的引用程序集中重用类型”,并仅检查包含我的数据合同的程序集时,它可以工作。也许有一些缓存,但我找不到它(我删除了所有的bin / obj目录,重新启动了计算机,...仍然存在问题)。 - Sam
2个回答

1

我在Hélder Gonçalves的问题版本中找到并发布了一个可能的解决方案。希望它能让您生成服务引用而不需要重定向到旧版Microsoft.Owin.Security程序集。如果这对您有用,请告诉我。

根据Rizier123的建议,这是我解决方案的全部文本:

完全相同的错误,我通过指定要重用类型的程序集来解决了这个问题。

添加服务引用时,在添加服务引用窗口左下角单击高级...按钮。在出现的服务引用设置屏幕上,在数据类型部分,在重用所有已引用程序集中的类型:复选框下,选择重用指定引用程序集中的类型单选按钮,然后仅勾选包含服务使用的类型的程序集即可解决此问题。


请不要只发布链接答案,而是将链接的关键部分放在您的答案中。 - Rizier123

0

由于各种因素,实际安装和引用的程序集版本会有所不同。但是您可以将绑定重定向到所需的版本。请参考this link

在您的情况下,您需要在configuration下的web.config中添加以下行:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="'Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
      <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.0.1.0"/>
    </dependentAssembly>
    </assemblyBinding>
</runtime>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接