Visual Studio 2012错误 Reference.svcmap 报错

7
自从昨天开始使用Visual Studio 2012 RC以来,我们有一个WCF解决方案。每当我尝试在另一个解决方案中使用“添加/删除引用”对话框时,在添加服务后会出现以下错误:

Error 1 Reference.svcmap: 无法为服务引用'DPService'生成代码。无法导入wsdl:portType。详细信息:运行WSDL导入扩展时抛出异常:System.ServiceModel.Description.DataContractSerializerMessageContractImporter。错误:类型'WebSupergoo.ABCpdf8.Objects.Bookmark'是一个不支持的递归集合数据契约。请考虑修改集合'WebSupergoo.ABCpdf8.Objects.Bookmark'的定义,以删除对其自身的引用。 错误源XPath://wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='IGQDynamicPackaging'] 无法导入wsdl:binding。 详细信息:导入wsdl:binding所依赖的wsdl:portType时出错。wsdl:portType路径://wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='IGQDynamicPackaging'] 错误源XPath://wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpContextBinding_IGQDynamicPackaging'] 无法导入wsdl:port。 详细信息:导入wsdl:port所依赖的wsdl:binding时出错。wsdl:binding路径://wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpContextBinding_IGQDynamicPackaging'] 错误源XPath://wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:service[@name='GQService']/wsdl:port[@name='WSHttpContextBinding_IGQDynamicPackaging'] App_WebReferences/DPService/

请注意:在使用VS 2010时,该服务工作正常。供您参考,我们已打开“在引用的程序集中重复使用类型”并选中了“在所有引用的程序集中重复使用类型”的选项。
相同的设置在VS 2010上可以正常工作,并且我们可以添加引用。但是,现在在安装了VS 2012 RC后,我无法向VS 2010和VS 2012中添加引用。是否有解决方案或解决方法?
我只想回退并想使用VS2010,“添加服务”现在在VS 2010中也给出了相同的引用错误。

1
我正在卸载 VS 2012,并将卸载 .NET 4.5,你尝试过这样做吗?有用吗? - Saw
嗨MSS,我们还没有尝试卸载它。您在卸载后有任何成功吗?感谢您对此的输入。 - amaz
卸载后,但是vs 2010损坏了,重新安装vs 2010(修复),并尝试查看发生了什么!!! - Saw
1
耶,现在没问题了! - Saw
我刚遇到了这个问题,发现我没有安装Visual Studio更新2。安装更新并重新启动电脑后,现在看起来没问题了。 - DevDave
3个回答

43

我曾经遇到类似的问题,后来在“配置服务引用”对话框中取消了“在已引用程序集中重新使用类型”的复选框。

1)右键单击服务引用 2)选择“配置服务引用” 3)取消勾选“在已引用程序集中重新使用类型”

我不确定这样做的所有影响,但它使我能够再次使用该引用。


2
在我们的情况下,我们需要使用“引用程序集”选项,因为我们有一个独立的程序集,在WCF和Web之间共享类型。值得注意的是,我们已经使用引用程序集进行了大量编码。将它们全部改回引用生成的代理真的是一场噩梦。 - amaz
2
结果是您不能重用类型,并且为每个模型对象生成一组新类。如果它们是pocos,那么很好,但如果您在客户端和服务器之间共享验证,则会出现问题。奇怪的是,一个用户正在安装sp1,然后事情变得有点奇怪。这不知何故影响了我的机器...取消选中重用、更新,然后再次打开它,一切都正常了。 - John Nicholas
这对我也起作用了,但我不应该因为VS 2012出了问题就必须在VS 2010中进行此更改。有没有一种真正解决这个问题的方法? - Mark B
在VS2012中,不要取消选中整个“重用引用程序集中的类型”,而是只取消选中非核心Microsoft的内容。 - Nir Levy
配置对话框无法访问。我收到一个错误提示,表示 VS 无法定位 .NET Framework。 - MacX
2
这样做的问题是所有服务方法参数都具有服务的命名空间,而不是共享命名空间。因此,如果您传递一个对象,它很可能与参数命名空间不匹配。还会生成大量“模糊”引用错误。 - CmdrTallen

4

看起来你的项目引用了两个包含'CustomerServiceReference'的程序集。代码生成器不知道应该使用哪一个。

为了解决这个问题,就像Lars所说的那样,在服务引用的高级选项中,你可以禁用“重用所有引用的程序集中的类型”,(通过选择“在指定的引用程序集中重用类型”)。你可以选择除了引起这个问题的程序集之外的所有程序集(如错误消息所述,该程序集定义了CustomerServiceReference)。


1

卸载 VS2012 后,如果卸载 VS2010 出现“未知错误”提示,这是一个小错误信息,重新安装 VS2010 即可修复问题!


我不明白为什么要卸载 VS 2012,然后安装 VS 2010,再重新安装 2012。 - Eslam Soliman
我顺便也有同样的问题。 - Eslam Soliman
我的意思是:重新安装VS 2010而不是VS 2012,问题是由于VS 2010无法工作引起的!因此,在卸载VS 2012后,我进行了修复。 - Saw
7
我找到了另一种解决同样问题的方法,希望它有效。您可以轻松地右键单击服务引用,然后选择配置并取消选中引用程序集中的重用类型,它就会起作用。 - Eslam Soliman
1
但是如果我需要在引用的程序集中重复使用类型呢?! - Saw

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