在过去的几天里,我面临着非常奇怪的问题,我尽力克服它,但它对我来说似乎太抽象了,我什至不知道该往哪里看。我已经阅读了此处、SO 以及谷歌为我找到的许多其他网站上的所有相关主题。案例非常复杂,但请多多包涵:
我在一个项目中工作,该项目具有 MVC Web 门户前端,该前端使用 WCF Web 服务与后端基础设施进行通信,有些是我们编写的,有些是 WWF 服务。所有服务都使用简单的 http 绑定。我接到了一项任务,要求我更改服务合同,从而更新服务参考。更新没有成功,给了我以下一组警告/错误:
Warning 43 Custom tool warning: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. PathToProject\Reference.svcmap 1 1 PortalProjectName
Warning 44 Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
XPath to Error Source: //wsdl:definitions[@targetNamespace='namespaceDeclaredInService']/wsdl:portType[@name='IEntityListService'] PathToProject\Reference.svcmap 1 1 PortalProjectName
Warning 45 Custom tool warning: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='namespaceDeclaredInService']/wsdl:portType[@name='IEntityListService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpBinding_IEntityListService'] PathToProject\Reference.svcmap 1 1 PortalProjectName
Warning 46 Custom tool warning: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpBinding_IEntityListService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:service[@name='EntityListService']/wsdl:port[@name='WSHttpBinding_IEntityListService'] PathToProject\Reference.svcmap 1 1 PortalProjectName
Error 47 Custom tool error: Failed to generate code for the service reference 'EntityListService'. Please check other error and warning messages for details. PathToProject\Reference.svcmap 1 1 PortalProjectName
我发现这可以通过让 Web 服务不重用引用程序集中的类型来解决。我做到了,然后我发现(ofc)我在代码中有不明确的类型引用。无论如何,我所做的这个解决方案只是为了测试目的,因为从引用的程序集中重用类型正是我想要的。所以我检查了重用复选框并开始试验。
从门户项目中,我删除了所有导致问题的引用(应该重用哪些类型),而不是更新引用(这几乎相当于不重用),当然不是。然后我发现这可能与作为同一解决方案的一部分的任何这些程序集中的一些隐藏错误有关。所以我测试了这个假设,构建了其中一个项目,并将其从 Portal 中引用为 dll。都一样。
然后,通过调查更多,我发现当我删除对具有我想要重用的类型的程序集的引用并从门户添加对项目“资源”的引用时也会发生此错误(门户中没有使用此项目中的类型或网络服务)。资源包含一个类(属性)和一个资源文件(cs+resx)。所以现在我有添加了对资源的引用的门户项目,没有引用任何最初导致错误的项目并且仍然发生错误。然后我看到资源项目中资源文件的访问修饰符设置为公共。我将其切换到内部,然后我成功更新了服务参考。问题是,这必须保持公开,因为其他项目使用这些资源,包括这些包含我希望服务重用的类型。
在谷歌上搜索这个主题时,我发现人们说这些有帮助:
- 重启VS
- 在没有管理员权限的情况下运行 VS
- 卸载 VS 2012 RC 并重新安装 VS2010
- 从头开始删除和添加引用,在这些步骤之间重新启动 VS
就我而言,这些解决方案都没有帮助。
从我的角度来看,这很奇怪,任何帮助都将不胜感激,因为目前我还没有解决这个问题的方法。
编辑:
在资源项目中,我制作了一个代理类,并在内部制作了实际资源。这使得构建成为可能,并且当门户仅引用资源项目时,更新引用工作。从项目中添加对其他程序集的引用后,它都是一样的。