生成WCF代理作为构建过程的一部分

时间:2012-07-17 20:00:34

标签: wcf msbuild proxy

我正在编写一个WCF服务,它将在我们公司内广泛使用,我想生成WCF客户端代理作为构建过程的一部分,并将它们打包到一个程序集中,以便服务的客户端不要不得不多次重复这个过程。有没有人知道要做到这一点?是否有任何预先存在的MSBuild构建任务?

6 个答案:

答案 0 :(得分:3)

这是我最后做的事情:

1)创建具有我想要生成客户端代码的服务的项目

2)创建一个执行以下操作的MSBuild任务:

a) Takes the compiled WCF Service assembly, runs svcutil.exe on it to extract XSD and WSDL metadata for all the services in the Service assembly.

b) Runs svcutil.exe again, this time on the extracted XSD and WSDL files to generate a .cs file containing the client

c) Run csc.exe to compile the generated client code into a separate assembly.

3)将MSBuild任务插入到包含该服务的项目的“AfterBuild”目标中。

现在,每次构建服务时,我都会获得一个自动生成的程序集,其中包含我们公司中的多个其他项目可以引用的客户端代码,而无需在多个项目中重新生成相同的Web引用。它们只能引用单个程序集,并且更容易更新,只需更新项目文件中的一行而不是Web引用生成器生成的多个文件。如果有人感兴趣,我可以向他们发送MSBuild任务的代码和使用它的XML片段。

答案 1 :(得分:3)

我试图解决同样的问题。这就是最终做的事情。 在.csproj中,在AfterBuild目标下,添加任务以获取SDK路径,并使用Exec命令运行svcutil.exe。我不得不使用& quot;因为路径包含空格。

<Target Name="AfterBuild">
   <GetFrameworkSdkPath>
       <Output TaskParameter="Path" PropertyName="SdkPath"/>
   </GetFrameworkSdkPath>
   <Exec Command="&quot;$(SdkPath)bin\NETFX 4.5.1 Tools\svcutil.exe&quot; $(TargetPath)"/>
</Target>

答案 2 :(得分:0)

我不知道任何内置任务,我就是这样做的:

创建项目,通过svcutil生成代理类并将其添加到项目中。 创建一个MSBuild脚本,它(1)调用svcutil并覆盖上面的类,(2)构建项目。

这会达不到你想要的效果吗?

答案 3 :(得分:0)

您创建的MSBuild方法完全我想要实现的目标(目前正在使用批处理文件)。请发布/发送MSBuild任务和XML片段!

答案 4 :(得分:-1)

查看T4模板和T4Toolbox等项目

答案 5 :(得分:-1)

为什么不简单地创建一个单独的类库项目。在该项目中,为您需要的每项服务使用“添加服务参考”。

其他代码可以简单地使用类库中的类。