引用描述(WCF代理类生成时svcutil重复生成多份同一个类):
比如svc1里:AAA(User a);
svc2里:BBB(User b);这个User会被svcutil生成两次。如果通过/namespace指定到不同的空间,倒不会出现错误,可是这样一来同一个类User却位于不同的地方,客户端调用总是出现模糊调用的情况。
如果在两个服务接口里引用了相同的类(比如如下的 BindInfo
和 DownloadInfo
),就会出现如下所示的模糊问题(因为SvcUntil默认加个 partial
,所以提示的都是成员模糊)。最简单的解决办法,其实就是直接把重复的类全删掉,或者尽量保证两个不同的接口不要共用一个类,就可以了。
但是项目难免还是碰到了几个接口引用同一个类的问题。找了很久都没找到现成的解决方案,于是查阅官方文档(ServiceModel 元数据实用工具 (Svcutil.exe)),发现可以用 /reference<file path>
这个参数解决,如下所示:
-
创建一个类库,将目标版本设为3.5及以下(因为SvcUntil貌似不支持更高的版本),将会出现模糊调用的类移动至该项目下。原项目就是3.5及以下版本的可以忽略。
-
编译项目,将生成的.dll文件复制到一个文件夹下,并在此文件夹内新建一个.bat文件。
-
编辑.bat文件,只需将其中一个包含出现模糊调用的类正常生成,其余的加一个
/reference<test.dll>
的参数就可以避免出现模糊调用。代码示例如下:SvcUtil.exe http://localhost:8005/SoftwareSvc?wsdl %必须有一个不引用,不然也会报错% SvcUtil.exe http://localhost:8005/DocumentSvc?wsdl /reference:ReferenceLib.dll %余下以此类推,加这个引用就好% pause