解决SvcUtil重复生成导致模糊调用的问题

引用描述(WCF代理类生成时svcutil重复生成多份同一个类):

比如svc1里:AAA(User a);
svc2里:BBB(User b);

这个User会被svcutil生成两次。如果通过/namespace指定到不同的空间,倒不会出现错误,可是这样一来同一个类User却位于不同的地方,客户端调用总是出现模糊调用的情况。

如果在两个服务接口里引用了相同的类(比如如下的 BindInfoDownloadInfo ),就会出现如下所示的模糊问题(因为SvcUntil默认加个 partial ,所以提示的都是成员模糊)。最简单的解决办法,其实就是直接把重复的类全删掉,或者尽量保证两个不同的接口不要共用一个类,就可以了。

image-20210225223037477

但是项目难免还是碰到了几个接口引用同一个类的问题。找了很久都没找到现成的解决方案,于是查阅官方文档(ServiceModel 元数据实用工具 (Svcutil.exe)),发现可以用 /reference<file path> 这个参数解决,如下所示:

  1. 创建一个类库,将目标版本设为3.5及以下(因为SvcUntil貌似不支持更高的版本),将会出现模糊调用的类移动至该项目下。原项目就是3.5及以下版本的可以忽略。

    image-20210225220918471
  2. 编译项目,将生成的.dll文件复制到一个文件夹下,并在此文件夹内新建一个.bat文件。

  3. 编辑.bat文件,只需将其中一个包含出现模糊调用的类正常生成,其余的加一个 /reference<test.dll> 的参数就可以避免出现模糊调用。代码示例如下:

    SvcUtil.exe http://localhost:8005/SoftwareSvc?wsdl %必须有一个不引用,不然也会报错%
    SvcUtil.exe http://localhost:8005/DocumentSvc?wsdl /reference:ReferenceLib.dll %余下以此类推,加这个引用就好%
    pause
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值