在过去的几天里,我面临着非常奇怪的问题,我尽力克服它,但对我来说似乎很抽象,我甚至不知道在哪里可以看到更多。我在这里阅读了所有相关的主题,以及谷歌为我找到的许多其他网站。案件非常复杂,但请耐心等待:
我正在开发一个项目,该项目具有MVC门户网站前端,使用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)我在代码中有不明确的类型引用。无论如何,这个解决方案我只是出于测试目的,因为重用参考程序集中的类型正是我想要的。所以我检查了重复使用复选框并开始试验。
从门户网站项目中,我删除了导致问题的所有引用(应该重用哪些类型),而不是更新引用工作(它几乎等同于不重用),当然不是构建。 然后我发现这可能与任何这些组件中的一些隐藏错误有关,这些组件是同一解决方案的一部分。所以我测试了这个假设,建立了其中一个项目并将其作为dll从Portal引用。一切都一样。
然后,通过调查更多我发现当我删除对我想要重用的类型的程序集的引用并从门户添加项目“Resources”的引用时也会发生此错误(不使用此项目的类型)在门户网站或Web服务中)。 资源包含一个类(属性)和一个资源文件(cs + resx)。 所以现在我有Portal项目添加了对资源的引用,没有引用最初导致错误和错误仍然发生的任何项目。然后我看到资源项目中资源文件的访问修饰符设置为Public。我把它切换到内部,然后我成功更新了服务参考。问题是,这必须保持公开,因为其他项目使用这些资源,包括这些包含我希望服务重用的类型。
在搜索这个主题时,我发现有人说这些有帮助:
就我而言,这些解决方案都没有帮助。
从我的观点来看,这很奇怪,任何帮助都会受到高度赞赏,因为现在我没有办法解决这个问题。
修改
在资源项目中,我创建了一个代理类,并在内部创建实际资源。这使得构建成为可能,并且当门户仅引用资源项目时更新引用有效。从项目中添加对其他程序集的引用后,它们都是一样的。
答案 0 :(得分:1)
原来,问题是由针对.NET Framework 3.5构建的log4net.dll引起的。我们针对.Net 4.0创建了自己的DLL,所有问题都消失了。